我正在尝试在python中编写一些短脚本,如果尚未启动该脚本,则会在子进程中启动另一个python代码,否则终止终端机和应用程序(Linux)。
所以看起来像:
#!/usr/bin/python from subprocess import Popen text_file = open(".proc", "rb") dat = text_file.read() text_file.close() def do(dat): text_file = open(".proc", "w") p = None if dat == "x" : p = Popen('python StripCore.py', shell=True) text_file.write( str( p.pid ) ) else : text_file.write( "x" ) p = # Assign process by pid / pid from int( dat ) p.terminate() text_file.close() do( dat )
应用缺少从文件 “ .proc”中 读取的pid来命名进程的知识,存在问题。另一个问题是解释器说名为 dat的 字符串不等于 “ x” ?我错过了什么?
使用很棒的psutil库非常简单:
psutil
p = psutil.Process(pid) p.terminate() #or p.kill()
如果您不想安装新的库,可以使用以下os模块:
os
import os import signal os.kill(pid, signal.SIGTERM) #or signal.SIGKILL
另请参阅os.kill文档。
os.kill
如果您有兴趣在命令python StripCore.py未运行时启动 它,否则将其杀死,则可以psutil可靠地使用它。
python StripCore.py
就像是:
import psutil from subprocess import Popen for process in psutil.process_iter(): if process.cmdline() == ['python', 'StripCore.py']: print('Process found. Terminating it.') process.terminate() break else: print('Process not found: starting it.') Popen(['python', 'StripCore.py'])
样品运行:
$python test_strip.py #test_strip.py contains the code above Process not found: starting it. $python test_strip.py Process found. Terminating it. $python test_strip.py Process not found: starting it. $killall python $python test_strip.py Process not found: starting it. $python test_strip.py Process found. Terminating it. $python test_strip.py Process not found: starting it.
注意 :在以前的psutil版本中,cmdline是 属性 而不是方法。
cmdline