杀死在后台启动的 SimpleHTTPServer 进程 subprocess.Popen
Kill SimpleHTTPServer process which is started in background with subprocess.Popen
我正试图在我的脚本中终止 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 }'`
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 }'`"])
(Pdb++) kill: cannot find process "`ps -ef | grep SimpleHTTPServer | grep 8080 | awk '{print }'`"
您正在尝试在该 kill
命令中围绕 shell 管道使用 shell 反引号。但是你试图在没有 shell=True
的情况下做到这一点。你不能那样做。
您可以构建一个 sh
命令行并 运行 使用 shell=True
,但这通常是个坏主意。
Replacing Older Functions with the subprocess
Module 上的 subprocess
文档展示了如何在 Python 中执行与 shell 相同的操作。这是一个更好的主意,但需要一些工作。
但最简单的方法就是不调用任何这些东西。
- 您不需要
ps|grep|grep|awk
来查找进程的 PID,因为您 Popen
编辑了进程,所以它只是 proc.pid
。
- 而且您也不需要
kill
,因为您仍然有那个 Popen
对象,所以您可以调用 kill
、terminate
或send_signal
就可以了。
我正试图在我的脚本中终止 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 }'`
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 }'`"])
(Pdb++) kill: cannot find process "`ps -ef | grep SimpleHTTPServer | grep 8080 | awk '{print }'`"
您正在尝试在该 kill
命令中围绕 shell 管道使用 shell 反引号。但是你试图在没有 shell=True
的情况下做到这一点。你不能那样做。
您可以构建一个 sh
命令行并 运行 使用 shell=True
,但这通常是个坏主意。
Replacing Older Functions with the subprocess
Module 上的 subprocess
文档展示了如何在 Python 中执行与 shell 相同的操作。这是一个更好的主意,但需要一些工作。
但最简单的方法就是不调用任何这些东西。
- 您不需要
ps|grep|grep|awk
来查找进程的 PID,因为您Popen
编辑了进程,所以它只是proc.pid
。 - 而且您也不需要
kill
,因为您仍然有那个Popen
对象,所以您可以调用kill
、terminate
或send_signal
就可以了。