Wie identifiziere ich einen Prozess ohne PID?

47

Ich habe einen Prozess, der auf 2 Häfen hört: 45136 / tcp und 37208 / udp (wirklich nehme ich an, dass es der gleiche Prozess ist). Aber netstat gibt keine pid zurück:

netstat -antlp | grep 45136
tcp        0      0 0.0.0.0:45136           0.0.0.0:*           LISTEN      - 

Gleiches Ergebnis mit "grep 37208".

Ich habe es auch versucht:

lsof -i TCP:45136

Aber es gibt nichts zurück. Es ist eine neue Installation von Squeeze und ich weiß wirklich nicht, was dieser Prozess sein könnte. Irgendeine Idee ?

ANTWORT Dank Ihrer Kommentare habe ich herausgefunden, was es war. Ich habe nfs-server nfs-common deinstalliert (nach einer dkpg --get-selections | grep nfs search) und der unbekannte Prozess ist verschwunden. Seltsam, dass Kernel-Prozesse in keiner Weise markiert sind.

Nochmals vielen Dank an euch beide. ;)

John Doe
quelle

Antworten:

57

netstat

Es gibt dort einen Prozess, Ihre Benutzer-ID ist einfach nicht in der Lage zu sehen, was es ist. Dies ist eine Schutzschicht lsof, die Sie davon abhält, dies zu sehen. Führen Sie den Befehl einfach erneut aus, aber geben Sie sudostattdessen den Befehl als Präfix ein .

$ sudo netstat -antlp | grep 45136

Es gibt sogar eine Warnung in der Ausgabe von lsofoben.

(Nicht alle Prozesse konnten identifiziert werden. Informationen zu nicht im Besitz befindlichen Prozessen werden nicht angezeigt. Sie müssen root sein, um alles zu sehen.)

Beispiel

$ netstat -antlp | grep 0:111
tcp        0      0 0.0.0.0:111       0.0.0.0:*     LISTEN      -                   

$ sudo netstat -antlp | grep 0:111
tcp        0      0 0.0.0.0:111       0.0.0.0:*     LISTEN      1248/rpcbind

ss

Wenn Sie kein Glück haben, reicht es netstatvielleicht ss. Sie müssen noch verwenden sudo, und die Ausgabe kann etwas kryptischer sein.

Beispiel

$ ss -apn|grep :111
LISTEN     0      128         :::111             :::*     
LISTEN     0      128          *:111              *:*     

$ sudo ss -apn|grep :111
LISTEN     0      128         :::111             :::*      users:(("rpcbind",1248,11))
LISTEN     0      128          *:111              *:*      users:(("rpcbind",1248,8))

Prozess ID noch nicht dabei?

Es gibt Fälle, in denen dem verwendeten TCP-Port einfach keine PID zugeordnet ist. Sie können über NFS in der Antwort von @ derobert nachlesen , die eine davon ist. Da sind andere. Ich habe Fälle, in denen ich SSH-Tunnel verwende, um eine Verbindung zu Diensten wie IMAP herzustellen. Diese werden auch ohne Prozess-ID angezeigt.

In jedem Fall können Sie eine ausführlichere Form verwenden, netstatdie zusätzliche Aufschluss darüber gibt, welcher Prozess letztendlich einen TCP-Port verwendet.

$ netstat --program --numeric-hosts --numeric-ports --extend

Beispiel

$ netstat --program --numeric-hosts --numeric-ports --extend |grep -- '-' | head -10
Proto Recv-Q Send-Q Local Address               Foreign Address             State       User       Inode      PID/Program name   
tcp        0      0 192.168.1.103:936           192.168.1.3:60526           ESTABLISHED root       160024310  -                   
tcp        0      0 192.168.1.1:2049            192.168.1.3:841             ESTABLISHED sam        159941218  -                   
tcp        0      0 127.0.0.1:143               127.0.0.1:57443             ESTABLISHED dovecot    152567794  13093/imap-login    
tcp        0      0 192.168.1.103:739           192.168.1.3:2049            ESTABLISHED root       160023970  -                   
tcp        0      0 192.168.1.103:34013         192.168.1.3:111             TIME_WAIT   root       0          -                   
tcp        0      0 127.0.0.1:46110             127.0.0.1:783               TIME_WAIT   root       0          -                   
tcp        0      0 192.168.1.102:54891         107.14.166.17:110           TIME_WAIT   root       0          -                   
tcp        0      0 127.0.0.1:25                127.0.0.1:36565             TIME_WAIT   root       0          -                   
tcp        0      0 192.168.1.1:2049            192.168.1.6:798             ESTABLISHED tammy      152555007  -             

Wenn Sie bemerken, dass die Ausgabe INODES enthält, können wir anhand dieser Informationen den Prozess nachvollziehen.

$ find -inum 152555007

Welches zeigt Ihnen eine Datei, die Sie zu einem Prozess führen könnte.

Verweise

slm
quelle
@derobert - ich dachte sie wären Threads.
SLM
@slm-Threads (Userspace-Threads) haben PIDs.
Derobert
@derobert - das dachte ich mir, aber ich habe es noch einmal überprüft, um sicherzugehen.
SLM
@derobert - Ich fand Folgendes: "Der Linux-Kernel selbst stellt den NFS-Server (auch bekannt als" knfsd ") bereit. Daher ist kein Prozess zugeordnet, da der Kernel kein Prozess ist."
SLM
@ JohnDoe - es könnte sein, dass sie mit NFS verwandt sind.
SLM
16

Eine andere Möglichkeit ist, dass der Socket nicht zu einem Prozess gehört, sondern zum Kernel. Ein häufiges Beispiel hierfür ist NFS.

Watt:~# netstat -ltp | egrep -- '-[[:space:]]*$'
tcp        0      0 *:nfs                   *:*                     LISTEN      -               
tcp        0      0 *:48131                 *:*                     LISTEN      -               
tcp6       0      0 [::]:55607              [::]:*                  LISTEN      -               
tcp6       0      0 [::]:nfs                [::]:*                  LISTEN      -               

Ich bin mir im Allgemeinen nicht sicher, wie ich diese identifizieren kann. Im speziellen Fall von NFS können Sie rpcinfouns häufig mitteilen:

anthony@Watt:~$ rpcinfo -p | grep 48131
    100021    1   tcp  48131  nlockmgr
    100021    3   tcp  48131  nlockmgr
    100021    4   tcp  48131  nlockmgr

Das funktioniert leider nur bei IPv4. Um v6 zu bekommen, müssen Sie aufhören, -pwas dann die Portnummern auf alberne Weise anzeigt: Als zwei zusätzliche Oktetts der IP-Adresse. Port 55607 wird somit zu 217,55 (da 217  × 256 +  55  = 55607):

anthony@Watt:~$ rpcinfo  | grep -i 217.55
    100021    1    tcp6      ::.217.55              nlockmgr   superuser
    100021    3    tcp6      ::.217.55              nlockmgr   superuser
    100021    4    tcp6      ::.217.55              nlockmgr   superuser
derobert
quelle
1
Vielen Dank für den Hinweis rpcinfo -pfunktioniert nur für IPv4
youfu