子进程和父进程的关闭<杜绝僵尸进程>

最近有一个需求,需要对后台通过终端(windows和linux)启动的进程进行生命周期的管理,现将方法总结如下:

通过psutil杀死父进程及相关子进程

p = psutil.Process(pid)
p_childs = p.children(recursive=True)
for p_child in p_childs:
	logger.debug("kill child pro: {}".format(p_child.pid))
    p_child.terminate()
    p_child.status()   # 查看进程状态

pyutil 进程其他操作

p = psutil.Process(pid)
p.name() # 进程名称
'python3.6'
>>> p.exe() # 进程exe路径
'/Users/sm/anaconda3/bin/python3.6'
>>> p.cwd() # 进程工作目录
'/Users/sm'
>>> p.cmdline() # 进程启动的命令行
['python3']
>>> p.ppid() # 父进程ID
3765
>>> p.parent() # 父进程
<psutil.Process(pid=110, name='bash') at 12345678910>
>>> p.children() # 子进程列表
[]
>>> p.status() # 进程状态
'running'
>>> p.username() # 进程用户名
'michael'
>>> p.create_time() # 进程创建时间
1511052731.120333
>>> p.terminal() # 进程终端
'/dev/ttys002'
>>> p.cpu_times() # 进程使用的CPU时间
pcputimes(user=0.081150144, system=0.053269812, children_user=0.0, children_system=0.0)
>>> p.memory_info() # 进程使用的内存
pmem(rss=8310784, vms=2481725440, pfaults=3207, pageins=18)
>>> p.open_files() # 进程打开的文件
[]
>>> p.connections() # 进程相关网络连接
[]
>>> p.num_threads() # 进程的线程数量
1
>>> p.threads() # 所有线程信息
[pthread(id=1, user_time=0.090318, system_time=0.062736)]
>>> p.environ() # 进程环境变量
{'SHELL': '/bin/bash', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...', 'PWD': '/Users/michael', 'LANG': 'zh_CN.UTF-8', ...}
>>> p.terminate() # 结束进程

命令行进程退出(linux)

os.killpg(pro.pid, signal.SIGUSR1)    # 信号量也可以使用signal.SIGUSR2

命令行进程退出(windows)

因为window对信号量支持不是很多,所以不能使用signal.SIGUSR1退出进程。

'taskkill.exe /pid {} /f'.format(str(pid)) 
# 或
'taskkill /F /IM {}'.format('python.exe')

if hasattr(os.sys, 'winver'):
	os.kill(pro.pid, signal.CTRL_BREAK_EVENT)
else:
	pro.send_signal(signal.SIGTERM)

参考文献

https://www.liaoxuefeng.com/wiki/1016959663602400/1183565811281984

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值