Python 2.7、Ubuntu 16.04
我们购买了一个专有的数学软件包,用于计算。我们正在尝试构建一个进程,该进程在运行10秒后终止该包的子进程
下面的解决方案在10秒后按预期终止do_math()
函数。但是solve
用它自己的pid启动一个子进程。因此,执行ps aux
显示它以自己的名称运行,而不是以python
名称运行
在python中,有没有任何方法可以跟踪并杀死以这种方式启动的pid
def do_math():
status = solve() #launches the package
#Start function as a process
k = multiprocessing.Process(target=do_math)
k.start()
# Wait for 10 seconds or until process finishes
k.join(10)
# If thread is still active
if k.is_alive():
print k.pid
os.kill(k.pid, signal.SIGINT)
假设
solve
函数正在做一些您无法更改的令人讨厌的事情,那么没有简单或干净的方法来做到这一点一种可能是在自己的组中生成子级,然后对组进行核攻击……但是用
multiprocessing
进行管理并不是件小事,它甚至可能不起作用,这取决于solve
如何启动子级一个更黑客的方法,但可能更容易和更可能的工作,是手动走孩子的进程树,找到并杀死任何孙子之前或之后杀死孩子。最简单的方法可能是像^{} 这样的第三方库。它看起来像这样:
如果你想在孩子死后杀死他们(我假设你发送
SIGINT
而不是SIGTERM
是有原因的,所以这可能很重要),你应该在杀死k
之前先复制p.children()
相关问题 更多 >
编程相关推荐