杀死在后台启动的简单HTTPServer进程与子进程.波彭



我试图在我的脚本中杀死SimpleHTTPServer。手动命令工作正常。

Starting SimpleHTTPServer in background:
-bash-4.2$ python -m SimpleHTTPServer 8080 &
[1] 26345
Verifying SimpleHTTPServer process:
-bash-4.2$ ps -ef | grep SimpleHTTPServer
x  26345 20169  0 17:44 pts/21   00:00:00 python -m SimpleHTTPServer 8080
Killing SimpleHTTPServer:
-bash-4.2$ kill -9 `ps -ef | grep SimpleHTTPServer | grep 8080 | awk '{print $2}'`
Verifying SimpleHTTPServer is killed or not:
-bash-4.2$ ps -ef | grep SimpleHTTPServer
x  26356 20169  0 17:45 pts/21   00:00:00 grep --color=auto SimpleHTTPServer

脚本中的相同内容不起作用。我正在使用subprocess.Popen.

subprocess.Popen(["kill", "-9", "`ps -ef | grep SimpleHTTPServer | grep 8080 | awk '{print $2}'`"])
(Pdb++) kill: cannot find process "`ps -ef | grep SimpleHTTPServer | grep 8080 | awk '{print $2}'`"

您正在尝试在该 kill 命令中使用 shell 反引号,围绕 shell 管道。但是您正在尝试在没有shell=True的情况下做到这一点.你不能这么做。

您可以构建一个sh命令行并使用 shell=True 运行它,但这通常是一个坏主意。

关于用subprocess模块替换旧函数的subprocess文档展示了如何在 Python 中执行与使用 shell 相同的操作。这是一个更好的主意,但需要做一些工作。

但最简单的办法就是不要叫这些东西。

  • 您不需要ps|grep|grep|awk来查找该过程的PID,因为您Popen了该过程,因此它只是proc.pid
  • 而且你也不需要kill,因为你身边还有那个Popen对象,所以你可以调用killterminatesend_signal

最新更新