【问题标题】:Killing shell=True process results in ResourceWarning: subprocess is still runningKilling shell=True 进程导致 ResourceWarning: subprocess is still running
【发布时间】:2019-02-27 18:49:19
【问题描述】:

听从How to terminate a python subprocess launched with shell=True的建议

我有一个从以下开始的过程

process = subprocess.Popen(my_cmd, shell=True, executable='/bin/bash', preexec_fn=os.setsid)

my_cmd 格式为some_cmd_that_periodically_outputs_to_stdout | grep "some_fancy_regex" > some_output_file.txt

我用以下命令终止进程

os.killpg(os.getpgid(process.pid), signal.SIGKILL)

杀死后,我收到以下警告

ResourceWarning: subprocess XXX is still running

为什么我会收到此警告?

【问题讨论】:

  • 删除这个你可能不需要的该死的shell=True,它会起作用的......或点击欺骗链接。
  • 但这正是我得到这个警告的方式,通过复制链接
  • 哦,对了。让我检查一下。您是否尝试过这个解决方案:stackoverflow.com/a/25134985/6451573 可能更好(我自己测试过)
  • 我仍然收到同样的警告。我不认为这是重复的,因为我的问题是问我为什么会收到此警告以及下面发生了什么。 (虽然知道如何解决它会是一个奖励)
  • 您是否尝试删除 shell=True ?我觉得没用。如果没有中间的 shell 进程,这会让事情变得更容易

标签: python subprocess


【解决方案1】:

你没有wait 来结束这个过程。即使你终止了这个进程,你仍然应该为它wait,这样你就没有zombie process。 Python 警告你,你没有wait

在杀死它后添加一个process.wait() 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 2019-06-13
    • 2020-07-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多