【问题标题】:Python: calling process.terminate() doesn't kill itPython:调用 process.terminate() 不会杀死它
【发布时间】:2011-07-27 03:51:54
【问题描述】:

当我运行以下代码时:

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

我运行此程序以确保该过程不会超过时间限制。显然这就是我无法终止进程的原因。

【问题讨论】:

  • @nmichaels,我都试过了。两者都不起作用。根据文档,他们在 Windows 上做同样的事情。
  • 你的意思是“我不能杀死进程”:循环在任何地方都不包含p.kill(),你说只有一个线程。在循环中打印cur_time, self.time_limit
  • 您不需要shell=True,除非您在诸如type 之类的shell 命令中执行内置命令。 None 是单例;你可以在循环中使用p.poll() is not None

标签: python windows process terminate


【解决方案1】:

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

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

【讨论】:

  • 非常感谢!的确,这就是原因。我什至没有考虑shell参数。为什么我什至使用它?
【解决方案2】:

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

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

【讨论】:

  • 我运行循环直到程序停止。如果它在 n 秒内没有停止,我会杀了它。问题是它不想被杀死。
  • 对;我试图否决我的答案,但它不起作用:) 可能是您正在运行的命令将 sigmask 设置为忽略终止信号。您可以尝试使用其他命令吗?例如,制作一个无限期休眠的脚本并尝试杀死它
猜你喜欢
  • 2016-12-08
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2015-05-12
  • 2019-02-08
相关资源
最近更新 更多