【问题标题】:Unable to terminate/kill a subprocess无法终止/杀死子进程
【发布时间】:2017-07-27 11:39:36
【问题描述】:

我有一个 python 脚本,它也将 OpenVPN 作为子进程启动。但是我发现自己完全无法杀死启动的子进程。

p = Popen(["openvpn", "--config", conf], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
# do some stuff
p.terminate()
# continue to do other stuff

我正在使用htop 监控进程列表,OpenVPN 不会停止,直到 python 脚本退出。

我已经尝试过:

  • p.terminate()
  • p.kill()
  • p.terminate(),然后是 p.kill()
  • os.kill(p.pid, 0)
  • os.kill(p.pid, signal.SIGINT)
  • os.kill(p.pid, signal.SIGKILL)

我还在杀戮尝试之前和之后添加了睡眠计时器,以验证这不仅仅是时间问题。

无论我尝试什么方法,脚本启动的 OpenVPN 子进程都不会死(被 htop 列为正在运行的进程),直到脚本退出。

如何终止 OpenVPN 子进程?

【问题讨论】:

    标签: python linux python-3.x process subprocess


    【解决方案1】:

    Linux子进程kill命令是kill -9 PID,需要在python中实现。

    【讨论】:

    • 这就是p.kill() 所做的。根据文档:Kills the child. On Posix OSs the function sends SIGKILL to the child.
    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多