繁体   English   中英

如何在windows中杀死子进程python

[英]How to kill subprocess python in windows

我将如何在 Windows 上终止进程?

我正在开始这个过程

    self.p = Process(target=self.GameInitialize, args=(testProcess,))
    self.p.start()

我试过了

self.p.kill()
self.p.terminate()
os.kill(self.p.pid, -1)
os.killpg(self.p.pid, signal.SIGTERM)  # Send the signal to all the process groups

错误

Process Object has no Attribute kill
Process Object has no Attribute terminate
Access Denied

我不能使用.join.

在 Windows 上, os.killpg将不起作用,因为它会向进程 ID 发送信号以终止。 这就是您现在如何在 Windows 上TerminateProcess进程,而您必须使用 win32 API 的TerminateProcessTerminateProcess进程。

因此,您可以在 Windows 上通过以下方式终止进程:

import signal
os.kill(self.p.pid, signal.CTRL_C_EVENT)

如果上述方法不起作用,请尝试使用signal.CTRL_BREAK_EVENT

我必须使用此链接中的此方法进行操作

subprocess.call(['taskkill', '/F', '/T', '/PID',  str(self._active_process.pid)])

这是因为self._active_process.kill()不够用

您应该提供您遇到的问题的最小可行示例。 如下所示,这个最小的工作示例正确终止了进程(在 Python 2.7.5 64 位上测试),因此您看到的错误在于您尚未显示的代码。

import multiprocessing as mp
import time

def work():
    while True:
        print('work process')
        time.sleep(.5)

if __name__ == '__main__':
    p = mp.Process(target=work)
    p.start()
    for i in range(3):
        print('main process')
        time.sleep(1)
    p.terminate()
    for i in range(3):
        print('main process')
        time.sleep(.5)

输出:

main process
work process
work process
main process
work process
work process
main process
work process
work process
main process
main process
main process
os.kill(self.p.pid, -9)

作品。 我不确定为什么 -1 返回访问被拒绝错误,但 -9 没有。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM