我们使用python进程来管理长时间运行的python子进程。有时需要终止子进程。kill命令不会完全终止进程,只会使其失效。
运行以下脚本将演示此行为。import subprocess
p = subprocess.Popen(['sleep', '400'], stdout=subprocess.PIPE, shell=False)
或者p = subprocess.Popen('sleep 400', stdout=subprocess.PIPE, shell=True)
将创建子流程。p.terminate()
p.kill()
对过程没有任何影响。由ps aux | grep sleep演示$ ps aux| grep 'sleep'
User 8062 0.0 0.0 7292 764 pts/7 S 14:53 0:00 sleep 400
该进程尚未终止。使用带'kill'和pid参数的subprocess.call()函数将发出kill命令。subprocess.call(['kill', str(p.pid)])
这会扼杀进程,但现在已经失效。$ ps aux | grep 'sleep'
User 8062 0.0 0.0 0 0 pts/7 Z+ 14:51 0:00 [sleep]
如果队列运行的时间足够长,它最终会达到最大进程数,还是最终会收获已失效的进程并恢复正常?
如果答案是前者,那么如何在不杀死父进程的情况下处理python中已失效的进程?
有没有更好的方法来杀死进程?