Python: 调用 process.terminate() 无法结束进程

1 投票
2 回答
1669 浏览
提问于 2025-04-16 14:50

当我运行以下代码时:

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

我运行这个是为了确保进程不会超过时间限制。显然,这就是我无法终止进程的原因。

2 个回答

0

你运行的命令可能在设置一个信号屏蔽,导致它忽略了杀死信号。你可以试试其他命令吗?比如,写一个脚本让它在一个无限循环中睡眠,然后试着杀掉这个脚本。

另外,题外话,我觉得在Windows上,shell参数没有什么意义。

2

因为你使用了 shell=True,所以你最终杀掉的只是命令行程序(cmd.exe 进程)本身。

进程组是Windows比较新的一个功能,我不知道除了任务调度器之外,还有哪个软件真正使用了这个功能。

撰写回答