web-dev-qa-db-ja.com

pidのないプロセスを識別する方法は?

2つのポートをリッスンするプロセスがあります:45136/tcpと37208/udp(実際には同じプロセスだと思います)。しかし、netstatはpidを返しません。

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

「grep 37208」と同じ結果。

私もlsofを試しました:

lsof -i TCP:45136

しかし、それは何も返しません。これはsqueezeの新規インストールであり、このプロセスが何であるかは本当にわかりません。何か案が ?

[〜#〜] answer [〜#〜]あなたのコメントのおかげで、それが何であるかを知りました。 nfs-server nfs-commonをアンインストールし(dkpg --get-selections | grep nfs searchの後)、不明なプロセスが表示されなくなりました。奇妙なことに、そのカーネルプロセスはまったくマークされていません。

二人ともありがとうございました。 ;)

50
John Doe

netstat

そこにはプロセスがあります。ユーザーIDは、それが何であるかを知るのに慣れていません。これはlsofが提供する保護レイヤーであり、これを防ぐことができます。単にコマンドを再実行しますが、代わりにSudoコマンドを使用してプレフィックスを付けます。

$ Sudo netstat -antlp | grep 45136

上部のlsofの出力には、これに関する警告さえあります。

(すべてのプロセスを識別できるわけではなく、所有されていないプロセス情報は表示されません。すべてを表示するにはrootである必要があります。)

$ 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

netstatで運がない場合は、おそらくssで十分です。それでもSudoを使用する必要があり、出力は少し不可解になる可能性があります。

$ 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))

プロセスIDがまだありませんか?

TCP使用中のポートに関連付けられたPIDが存在しない場合があります。NFSについては、 @ derobertの回答 で読むことができます。他にもあります。IMAPなどのサービスに接続するためにsshトンネルを使用している場合があります。これらはプロセスIDなしでも表示されます。

いずれの場合も、より詳細な形式のnetstatを使用できます。これにより、最終的にTCPポートを使用しているプロセスをさらに詳しく知ることができます。

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

$ 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  -             

出力にINODESが含まれていることに気付いた場合は、この情報を使用してプロセスに戻ることができます。

$ find -inum 152555007

これにより、プロセスにつながる可能性のあるファイルが表示されます。

参考文献

64
slm

別のオプションは、ソケットがプロセスに属しておらず、カーネルに属していることです。これの一般的な例の1つは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      -               

一般的に、これらを特定するための良い方法はわかりません。 NFSの特定のケースでは、rpcinfoはしばしば私たちに伝えることができます:

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

残念ながら、これはIPv4でのみ機能します。 v6を入手するには、除外する必要があります-p、これは愚かな方法でポート番号を表示します:IPアドレスの2つの追加オクテットとして。したがって、ポート55607は217.55になります(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
18
derobert