1

当我运行以下代码时:

p = subprocess.Popen("...", shell=True)          
if p.poll() == None:
  p.kill()

该过程根本没有被杀死。我在 Windows 上。

我以为是因为多线程,我在一个线程中运行它,还是一样的。

你有什么想法为什么会发生这种情况?

谢谢

更新

我找到了导致问题的代码:

while cur_time < self.time_limit:
            if p.poll() != None:
                too_much_time = False
                break
            time.sleep(0.1)
            cur_time += 0.1

我运行它以确保该过程不会超过时间限制。显然这就是为什么我不能杀死这个过程。

4

2 回答 2

2

因为您使用shell=True,所以您最终杀死的只是外壳(cmd.exe 进程)本身。

进程组是 Windows 的一个相对较新的功能,除了任务计划程序之外,我不知道有任何软件实际使用它们。

于 2011-03-31T19:52:15.527 回答
0

可能是您正在运行的命令将 sigmask 设置为忽略终止信号。您可以尝试使用其他命令吗?例如,制作一个无限期休眠的脚本并尝试杀死它

题外话,我认为 shell arg 在 Windows 上没有任何意义

于 2011-03-31T19:08:49.713 回答