如何使用pid从Python终止进程?

我正在尝试在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库非常简单:

p = psutil.Process(pid)

p.terminate() #or p.kill()

如果您不想安装新的库,可以使用以下os模块:

import os

import signal

os.kill(pid, signal.SIGTERM) #or signal.SIGKILL

另请参阅os.kill文档。


如果您有兴趣在命令python StripCore.py未运行时启动 它,否则将其杀死,则可以psutil可靠地使用它。

就像是:

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属性 而不是方法。

以上是 如何使用pid从Python终止进程? 的全部内容, 来源链接: utcz.com/qa/424084.html

回到顶部