我已经使用python使用以下命令在linux中启动了一个命令行程序
os.system()
我想跟踪程序并在必要时在同一个python程序中杀死它。
如果有人能说出最安全的方法,那会很酷。由于
答案 0 :(得分:1)
使用subprocess.Popen
和Popen.pid
,您可以获得您开始的流程的pid。
像这样:
>>> s = subprocess.Popen(["/bin/sleep"," 100 &"])
>>> print s.pid
34934
在另一个shell中,运行ps -ef|grep sleep
,您可以看到:
WKPlus@mac:~/workspace/test >ps -ef|grep sleep
501 34934 34904 0 10:53下午 ttys000 0:00.00 /bin/sleep 100 &
501 34938 238 0 10:54下午 ttys002 0:00.00 grep sleep
是的,s.pid
正是您刚刚开始的流程的pid。
并且,请注意不要向shell=True
添加subprocess.Popen(["/bin/sleep"," 100 &"])
,否则您将获得shell的pid,这是/bin/sleep
的父进程。
The official explanation为此:
Note that if you set the shell argument to True, this is the process ID of the spawned shell.
获得pid
后,您可以在此之后使用os.kill(pid)
来终止指定的进程。