我正在尝试使用此shell命令终止进程树:
kill -TERM -- -3333
所以在python中我使用subprocess
:
subprocess.call(['kill', '-TERM', '--', '-3333'])
该过程按预期终止,但我收到此消息:
ERROR: garbage process ID "--".
Usage:
kill pid ... Send SIGTERM to every process listed.
kill signal pid ... Send a signal to every process listed.
kill -s signal pid ... Send a signal to every process listed.
kill -l List all signal names.
kill -L List all signal names in a nice table.
kill -l signal Convert between signal numbers and names.
为什么我收到此消息以及我做错了什么?
我在Ubuntu 10.04上使用Python 2.6.5。
答案 0 :(得分:3)
您正在向kill
命令传递一个它无法识别的参数。您只需删除--
:
subprocess.call(['kill', '-TERM', '-3333'])
如果不支持--
,你可能应该在没有短划线的情况下传入PID,否则也不会产生负值;在这一点上,你只是在发出单一过程的信号。
请注意,您不是通过shell执行此操作,而您的shell 可能具有自己的kill
命令实现,Python指示操作系统查找第一个kill
<而路径上的em>二进制可执行文件。内置shell可能会接受--
,但这不是您在此处执行的命令。
如果您必须使用内置的shell,那么您必须设置shell=True
并传入字符串命令行:
subprocess.call('kill -TERM -- -3333', shell=True)
这使用/bin/sh
;您可以使用executable
参数设置不同的shell来运行命令:
subprocess.call('kill -TERM -- -3333', shell=True, executable='/bin/bash')
最后但并非最不重要的是,您可能根本不需要kill
命令 。 Python可以使用os.kill()
function:
import os, signal
os.kill(3333, signal.SIGTERM)
并且os.killpg()
function可以向进程组发送信号:
import os, signal
os.killpg(3333, signal.SIGTERM)