看不到一些进程名称
can't see some of the process names
我正在 python 中创建一个简单的程序,它应该保存我当前的进程(使用 linux 和 pycharm)。
我的class代码:
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 中看不到的进程是被“[]”包围的进程。
我不明白这是为什么。另外,我也想得到它们。我该怎么做以及为什么会这样?
谢谢!
这些你看不到的进程是内核线程。顾名思义,它们在内核 space 中是 运行,因此不是 PID 1 的子代,即 init 系统。他们的 cmdline 是空的,因为他们没有任何相应的可执行文件被调用,也没有参数要传递,这个空的 cmdline 是一种非常安全的识别它们的方法。如果你仍然想得到他们的名字,它在名称字段下的文件 /proc/"pid"/status 中。
我正在 python 中创建一个简单的程序,它应该保存我当前的进程(使用 linux 和 pycharm)。
我的class代码:
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 中看不到的进程是被“[]”包围的进程。
我不明白这是为什么。另外,我也想得到它们。我该怎么做以及为什么会这样?
谢谢!
这些你看不到的进程是内核线程。顾名思义,它们在内核 space 中是 运行,因此不是 PID 1 的子代,即 init 系统。他们的 cmdline 是空的,因为他们没有任何相应的可执行文件被调用,也没有参数要传递,这个空的 cmdline 是一种非常安全的识别它们的方法。如果你仍然想得到他们的名字,它在名称字段下的文件 /proc/"pid"/status 中。