通过Python在Linux上的进程列表


Answers:


128

/proc与破解文本输出相比,IMO对文件系统的讨厌程度更低ps

import os
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]

for pid in pids:
    try:
        print open(os.path.join('/proc', pid, 'cmdline'), 'rb').read().split('\0')
    except IOError: # proc has already terminated
        continue

10
您将必须用try / except块包围read()调用,因为从读取os.listdir('/ proc')返回的pid可能在您读取cmdline时就不存在了。
Yanamon 2012年

4
最后!验证!现在我可以停止了!:-)
bobince 2012年

5
/ proc为-1,因为它不可移植,并且有更好的接口可用
好人2014年

2
当心:命令行以0x00终止。空格也被替换为相同的字符。
费德里科

2
只需使用psutil-它就可以通过一个漂亮的Pythonic界面完成所有这些工作,并且如果您想在非Linux服务器上运行,则可以移植。
RichVel

83

您可以将psutil用作独立于平台的解决方案!

import psutil
psutil.pids()

[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,
268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,
2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 
4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358, 
4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235, 
5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]

2
只需看一下文档即可
enthus1ast

感谢您提出来!整洁的包装。
codekoala 2012年

5
它并非完全独立于平台,在OSX上,您可能会遇到AccessDenied错误:groups.google.com/forum/?
fromgroups=#!topic/psutil/bsjpawhiWms

@amos kinda很有道理-您想先获得特权,然后再获取有关流程的信息。感谢您的提示。
JSmyth 2014年

为了扩大OSX点-与Linux不同,您需要OSX上的root特权来获取进程信息。
RichVel

8

您可以使用第三方库,例如PSI

PSI是一个Python软件包,提供对进程和其他杂项系统信息(例如体系结构,引导时间和文件系统)的实时访问。它具有pythonic API,该API在所有受支持的平台上均保持一致,但在需要的地方也可以公开特定于平台的详细信息。


2
PSI的最新更新时间为2009年,而psutil的更新时间为本月(2015年11月)-看来psutil更好。
RichVel 2015年

7

创建和使用子流程的认可方法是通过子流程模块。

import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl

该命令分解为python参数列表,因此不需要在shell中运行(默认情况下,subprocess.Popen不使用它执行的任何shell环境)。因此,我们不能简单地向Popen提供'ps -U 0'。



-2
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
    print(lst[i])
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.