Python笔记:Linux和Windows下用python找到并杀死进程

如何使用 python 找到进程并杀死该进程,或者是确认某进程有没有在运行,这些功能的使用场景是很多的。

比如你的服务器上有一个服务脚本 server.py 需要运行某个程序去做某些操作,但是在脚本运行这个程序好半天没返回,多半是发生异常卡住了(这个情况在 windows 下太常见了),最有效的办法就是杀死这个异常进程,再去重新启动它。

实现类似的需求,在 WindowsLinux 两种服务器实现的方法可能稍有不同,上代码:

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

若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。

发表评论

您的电子邮箱地址不会被公开。

Scroll to top