2016-04-26 13 views
4

私は現在のプロセス(linuxとpycharmを使って)を保存する単純なプログラムを、Pythonで作成しています。プロセス名の一部を見ることができません

私のクラスコード:

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で見ることができないプロセスは、「[]」で囲まれたプロセスです。

私はなぜこれが理解できません。また、私もそれらを取得したい。どうすればいいのでしょうか、なぜこれが起こっていますか?

ありがとうございました!

+0

'cat/proc/2/cmdline'でも何も表示されないでしょう。' strace ps -aux | grep/proc' –

+0

@PadraicCunninghamあなたは正しいです。しかし、pid 2のプロセスです。これは間違っているのでしょうか?私に情報を示す良い方法がありますか?そして、なぜこれが本当に理解できないのですか?なぜ 'cat/proc/1/cmdline'が私に情報を与えるのですか2はしませんでしたか? – moshem

+0

straceの出力を見ると、 '/ status'などが表示されます。これはあなたが見ないものの名前です。 –

答えて

2

表示されないプロセスは、カーネルスレッドです。名前が示すように、それらはカーネル空間で動作しているので、PID 1の子ではありません。つまり、initシステムです。それらのcmdlineは、呼び出される対応する実行可能ファイルと渡される引数がないため空です。この空のcmdlineは、それらを識別するための非常に安全な方法です。それでも名前を取得したい場合は、名前欄のファイル/proc/"pid"/statusにあります。

関連する問題