gpt4 book ai didi

python - 通过 Python 杀死进程树时出现语法错误

转载 作者:行者123 更新时间:2023-12-04 18:57:37 25 4
gpt4 key购买 nike

我正在尝试使用此 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。

最佳答案

您正在通过 kill命令它无法识别的参数。您可以简单地删除 -- :

subprocess.call(['kill', '-TERM', '-3333'])

如果 --,您可能也应该在不带破折号的情况下传递 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 可以使用 os.kill() function 直接发送信号:
import os, signal

os.kill(3333, signal.SIGTERM)

os.killpg() function可以向进程组发送信号:
import os, signal

os.killpg(3333, signal.SIGTERM)

关于python - 通过 Python 杀死进程树时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40627308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com