杀死通过子进程在后台启动的SimpleHTTPServer进程

纳帕特尔

我试图杀死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=True你不能那样做。

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

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

但是最简单的事情就是不调用任何这些东西。

  • 您不需要ps|grep|grep|awk来查找流程的PID,因为您是Popen编辑过该流程的,所以只是proc.pid
  • 你不需要kill任何的,因为你仍然有Popen各地的对象,所以你可以打电话killterminatesend_signal在其上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章