无法看到一些流程名称

时间:2016-04-26 14:27:46

标签: python linux process

我在python中创建一个应该保存当前进程的简单程序(使用linux和pycharm)。

我的班级代码:

class pidSaver:
    __pidDictionary={}
    def __init__(self):
        pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
        for pid in pids:
            try:
                os.kill(int(pid), 0)
            except OSError as e:
                if  e.errno != errno.EPERM: #no premission error
                    continue
            try:
                self.__pidDictionary[pid]=open(os.path.join('/proc', pid, 'cmdline'), 'rb').read()
            except IOError: # proc has already terminated
                continue

    def getDic(self):
        return self.__pidDictionary

和我的主要代码:

pidsTry = pidSaver()
printList= pidsTry.getDic()
keyList= list(printList.keys())
IntegerKeyList=[]
for key in keyList:
    IntegerKeyList.append(int(key))
IntegerKeyList.sort()
for key in IntegerKeyList:
    print "%d : %s" %(key ,printList[str(key)])

输出:

1 : /sbin/init
2 : 
3 : 
5 :
...
7543 : less 
...

因此,由于某些原因,某些过程我无法获得名称而且我得到了空白。 当我在计算机上运行命令ps -aux | less时,我得到了这个结果:

root         1  0.0  0.0  33776  4256 ?        Ss   אפר24   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    אפר24   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    אפר24   0:00 [ksoftirqd/0]
myUser     7543  0.0  0.0  13752  1548 pts/9    T    אפר24   0:00 less

所以基本上,我在python中看不到的过程是" []"包围的过程。

我不明白为什么会这样。另外,我也希望得到它们。我怎么能这样做以及为什么会这样呢?

谢谢你!

1 个答案:

答案 0 :(得分:2)

您无法看到的这些进程是内核线程。正如名称所说它们在内核空间中运行,因此不是PID 1的子代,即init系统。他们的cmdline是空的,因为他们没有被调用的任何相应的可执行文件,也没有传递参数,而这个空的cmdline是一种非常安全的识别方法。如果您仍想在名称字段下的文件 / proc /" pid" / status 中获取其姓名。