如何使用 python
找到进程并杀死该进程,或者是确认某进程有没有在运行,这些功能的使用场景是很多的。
比如你的服务器上有一个服务脚本 server.py
需要运行某个程序去做某些操作,但是在脚本运行这个程序好半天没返回,多半是发生异常卡住了(这个情况在 windows
下太常见了),最有效的办法就是杀死这个异常进程,再去重新启动它。
实现类似的需求,在 Windows
和 Linux
两种服务器实现的方法可能稍有不同,上代码:
windows服务器
我们使用 psutil
这个包来快速定位进程,下面的示例中我们要找的软件是 office word
,进程名 WINWORD.EXE
。
import psutil
import os
process_name = 'WINWORD.EXE'
allPid = psutil.pids()
for pid in allPid:
p = psutil.Process(pid)
print('pid-%s, pname-%s' % (pid, p.name()))
if p.name() == process_name:
print('杀死进程' + process_name)
cmd = 'taskkill /F /IM ' + process_name
os.system(cmd)
Linux服务器
在 Linux
服务器下当然也可以用 psutil
去根据进程名找到,然后杀死进程,但 Linux
下我们可以做到更好,比如同名进程 python
在执行两个不同的脚本,我们只想杀死其中这个叫 ha.py
的脚本,如示例中这样即可做到。
import os
import re
process_name = 'python\ ha.py'
cmd = 'ps -ef | grep {0} | grep -v grep'.format(process_name)
print(cmd)
f = os.popen(cmd)
for line in f.readlines():
print(line)
line = line.replace("\n", "")
line = re.sub(' +', ' ', line)
if line != '':
res = line.split(' ')
print(res)
print('杀死进程' + process_name)
cmd2 = 'kill -9 ' + res[1]
# 使用os.system()
os.system(cmd2)
总结
稍微总结一下,为了使用准确找到进程,在不同的环境下我们使用了不同的方法,还用到了执行系统指令的方法 os.system()
,为了获取输出结果,用到了 os.popen()
命令,实际上这里还有另外一些方法,比如 execfile()
函数,还有官方推荐的 subprocess
模块,有兴趣的同学可以去了解一下。
标题:Python笔记:Linux和Windows下用python找到并杀死进程
原文链接:https://beltxman.com/3406.html
若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。