通过Python终止进程树时出现语法错误
我正在尝试使用以下shell命令终止进程树:通过Python终止进程树时出现语法错误,python,ubuntu,subprocess,Python,Ubuntu,Subprocess,我正在尝试使用以下shell命令终止进程树: kill -TERM -- -3333 因此,在python中,我使用子流程: subprocess.call(['kill', '-TERM', '--', '-3333']) 进程按预期终止,但我收到以下消息: ERROR: garbage process ID "--". Usage: kill pid ... Send SIGTERM to every process listed. kill signa
kill -TERM -- -3333
因此,在python中,我使用子流程
:
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。您正在向
kill
命令传递一个它无法识别的参数。您只需删除--
:
您可能也应该在不带破折号的情况下传入PID,如果--
不受支持,则负PID也不受支持;在这一点上,您将只发送单个进程的信号
请注意,您不是通过shell执行此操作,虽然shell可能有自己的kill
命令实现,但Python指示操作系统在路径上查找第一个kill
二进制可执行文件。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可以通过以下方式直接发送信号:
并且可以向进程组发送信号:
import os, signal
os.killpg(3333, signal.SIGTERM)
您正在向
kill
命令传递一个它无法识别的参数。您只需删除--
:
您可能也应该在不带破折号的情况下传入PID,如果--
不受支持,则负PID也不受支持;在这一点上,您将只发送单个进程的信号
请注意,您不是通过shell执行此操作,虽然shell可能有自己的kill
命令实现,但Python指示操作系统在路径上查找第一个kill
二进制可执行文件。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可以通过以下方式直接发送信号:
并且可以向进程组发送信号:
import os, signal
os.killpg(3333, signal.SIGTERM)
有(至少)两次“杀人”。(通常)有/bin/kill
和shell内置。如果您想要内置shell,请使用shell=True
。至少有两个“kill”。(通常)有/bin/kill
和shell内置。如果需要shell内置,请使用shell=True
。