python代码获取linux进程pid

python代码获取linux进程pid

在某些需求中,我们需要根据某些条件动态的执行或者停止某程序(linux环境下),对于动态执行,一般没有什么难度。

开始某程序:需要知道程序的路径,以及对应的.py文件

os.system(‘cd {} && python {}’.format(file_path,a.py))

上面就是表明执行a.py文件

动态停止某程序。

上网搜索好久,一般推荐的方法都是安装 psutil,

import  psutil;
for proc in psutil.process_iter():
    print("pid-%d,name:%s" % (proc.pid,proc.name()))
#执行结果
pid-1,name:systemd
pid-2,name:kthreadd
pid-3,name:ksoftirqd/0
pid-5,name:kworker/0:0H
pid-6,name:kworker/u12:0
pid-7,name:rcu_sched
pid-8,name:rcu_bh
pid-9,name:migration/0
pid-10,name:watchdog/0
pid-11,name:watchdog/1
pid-12,name:migration/1
pid-13,name:ksoftirqd/1
pid-15,name:kworker/1:0H
pid-16,name:watchdog/2
pid-17,name:migration/2
pid-18,name:ksoftirqd/2
pid-20,name:kworker/2:0H
pid-21,name:watchdog/3
pid-22,name:migration/3
pid-23,name:ksoftirqd/3
pid-25,name:kworker/3:0H
pid-26,name:watchdog/4
pid-27,name:migration/4

但在实际操作中发现,此种方法并不能解决想要获取pid的问题。因为其后面显示的信息并不精确。比如我们python执行两个.py文件,则结果中的name:python,会出现两个,这样我们如何能获得pid?

实际:

import os
pid=os.popen('ps -ef | grep  main.py ').readlines()[0].split()[1]
#此处的popen会把命令的输出作为返回值,我们再采用读文件的形式再根据实际情况进行分割,取其下标即可
#此处补充os.system(cmd) 返回值只会有0(成功),1,2
print(pid)
#执行结果
19212

猜你喜欢

转载自blog.csdn.net/weixin_43880277/article/details/85139186