如何通过Python中的进程名称获得PID?

如何通过Python中的进程名称获得PID?,第1张

概述如何通过Python中的进程名称获得PID?

有没有什么办法可以通过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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1282382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存