Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python终止进程树时出现语法错误_Python_Ubuntu_Subprocess - Fatal编程技术网

通过Python终止进程树时出现语法错误

通过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

我正在尝试使用以下shell命令终止进程树:

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