使用 os.system() 问题终止 Ubuntu 上的进程
Killing process on Ubuntu with os.system() issue
我尝试将命令从 python shell 发送到 Ubuntu OS
以定义特定端口上存在的进程并将其终止:
port = 8000
os.system("netstat -lpn | grep %s" % port)
输出:
tcp 0 0 127.0.0.1.8000 0.0.0.0:* LISTEN 22000/python
然后:
os.system("kill -SIGTERM 22000")
但得到了追踪
sh: 1: kill: Illegal option -S
出于某种原因,无法将命令传输到具有完整信号 -SIGTERM
的 OS,但只能传输到 -S
。我可以简单地直接从 Terminal
终止这个进程,所以看起来它是 Python
或 os
问题...我如何使用 运行 kill
命令36=]?
感谢任何帮助
您可以尝试使用
import signal
os.kill(process.pid, signal.SIGKILL)
可以找到文档 here。
您也可以使用 signal.CTRL_C_EVENT
,它对应于 CTRL+C 击键事件。
os.system
使用 sh
来执行命令,而不是您在终端中获得的 bash
。 sh
中的 kill
内置函数要求给出信号名称时不带 SIG
前缀。将 os.system
命令行更改为 kill -TERM 22000
。
[编辑] 正如@DJanssens 建议的那样,使用 os.kill
比调用 shell 这样简单的事情更好。
我尝试将命令从 python shell 发送到 Ubuntu OS
以定义特定端口上存在的进程并将其终止:
port = 8000
os.system("netstat -lpn | grep %s" % port)
输出:
tcp 0 0 127.0.0.1.8000 0.0.0.0:* LISTEN 22000/python
然后:
os.system("kill -SIGTERM 22000")
但得到了追踪
sh: 1: kill: Illegal option -S
出于某种原因,无法将命令传输到具有完整信号 -SIGTERM
的 OS,但只能传输到 -S
。我可以简单地直接从 Terminal
终止这个进程,所以看起来它是 Python
或 os
问题...我如何使用 运行 kill
命令36=]?
感谢任何帮助
您可以尝试使用
import signal
os.kill(process.pid, signal.SIGKILL)
可以找到文档 here。
您也可以使用 signal.CTRL_C_EVENT
,它对应于 CTRL+C 击键事件。
os.system
使用 sh
来执行命令,而不是您在终端中获得的 bash
。 sh
中的 kill
内置函数要求给出信号名称时不带 SIG
前缀。将 os.system
命令行更改为 kill -TERM 22000
。
[编辑] 正如@DJanssens 建议的那样,使用 os.kill
比调用 shell 这样简单的事情更好。