有没有什么办法可以通过Python中的进程名称获得PID?
PID USER PR NI VIRT RES SHR S %cpu %MEM TIME+ COMMAND 3110 meysam 20 0 971m 286m 63m S 14.0 7.9 14:24.50 Chrome
例如,我需要通过Chrome获得3110 。
为什么我会从bind()而不是从Listen()获得EADDRINUSE?
以控制台模式更改/过滤GDB输出
Python的seleniumSelenium:铬不可达
如何使内联函数只占用可执行文件中一个副本的内存空间
为什么禁止中断禁止内核抢占以及自旋locking如何禁用抢占
您可以通过pIDof使用pIDof来获取进程的pID:
from subprocess import check_output def get_pID(name): return check_output(["pIDof",name]) In [5]: get_pID("java") Out[5]: '23366n'
check_output(["pIDof",name])将以"pIDof process_name"运行该命令, 如果返回代码为非零,则会引发CalledProcessError。
处理多个条目并转换为整数:
from subprocess import check_output def get_pID(name): return map(int,check_output(["pIDof",name]).split())
在[21]中:get_pID(“Chrome”)
Out[21]: [27698,27678,27665,27649,27540,27530,27517,14884,14719,13849,13708,7713,7310,7291,7217,7208,7204,7189,7180,7175,7166,7151,7138,7127,7117,7114,7107,7095,7091,7087,7083,7073,7065,7056,7048,7028,7011,6997]
或者通过-s标志来获得单个pID:
def get_pID(name): return int(check_output(["pIDof","-s",name])) In [25]: get_pID("Chrome") Out[25]: 27698
你也可以使用pgrep ,在prgep也可以给出匹配的模式
import subprocess child = subprocess.Popen(['pgrep','program_name'],stdout=subprocess.PIPE,shell=True) result = child.communicate()[0]
你也可以像这样用ps来使用awk
ps aux | awk '/name/{print $2}'
对于posix(linux,BSD等…只需要挂载/ proc目录),在/ proc中使用os文件更容易。 它的纯python,不需要在外面调用shell程序。
工作在Python 2和3(唯一的区别(2to3)是异常树,因此“ 除了异常 ”,我不喜欢,但保持兼容性,也可以创建自定义异常。
#!/usr/bin/env python import os import sys for dirname in os.Listdir('/proc'): if dirname == 'curproc': continue try: with open('/proc/{}/cmdline'.format(dirname),mode='rb') as fd: content = fd.read().decode().split('x00') except Exception: continue for i in sys.argv[1:]: if i in content[0]: print('{0:<12} : {1}'.format(dirname,' '.join(content)))
示例输出(它像pgrep一样工作):
phoemur ~/python $ ./pgrep.py bash 1487 : -bash 1779 : /bin/bash
为了改进padraic的答案:当check_output返回一个非零的代码时,会引发一个CalledProcessError。 当进程不存在或没有运行时,会发生这种情况。
我会做什么来赶上这个例外是:
#!/usr/bin/python from subprocess import check_output,CalledProcessError def getPIDs(process): try: pIDList = map(int,process]).split()) except CalledProcessError: pIDList = [] print 'List of PIDs = ' + ','.join(str(e) for e in pIDList) if __name__ == '__main__': getPIDs("Chrome")
输出:
$ python pIDproc.py List of PIDS = 31840,31841,41942
基于优秀的@ Hackaholic的答案完整的例子:
def get_process_ID(name): """Return process IDs found by (partial) name or regex. >>> get_process_ID('kthreadd') [2] >>> get_process_ID('watchdog') [10,11,16,21,26,31,36,41,46,51,56,61] # ymmv >>> get_process_ID('non-existent process') [] """ child = subprocess.Popen(['pgrep','-f',name],shell=False) response = child.communicate()[0] return [int(pID) for pID in response.split()]
总结以上是内存溢出为你收集整理的如何通过Python中的进程名称获得PID?全部内容,希望文章能够帮你解决如何通过Python中的进程名称获得PID?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)