如何使用pid从Python终止进程?
我正在尝试在python中编写一些短脚本,如果尚未启动该脚本,则会在子进程中启动另一个python代码,否则终止终端机和应用程序(Linux)。
所以看起来像:
#!/usr/bin/pythonfrom 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
库非常简单:
p = psutil.Process(pid)p.terminate() #or p.kill()
如果您不想安装新的库,可以使用以下os
模块:
import osimport signal
os.kill(pid, signal.SIGTERM) #or signal.SIGKILL
另请参阅os.kill
文档。
如果您有兴趣在命令python StripCore.py
未运行时启动 它,否则将其杀死,则可以psutil
可靠地使用它。
就像是:
import psutilfrom 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 aboveProcess 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
是 属性 而不是方法。
以上是 如何使用pid从Python终止进程? 的全部内容, 来源链接: utcz.com/qa/424084.html