PIDを持たないプロセスを識別する方法は?


47

45136 / tcpと37208 / udpの2つのポートをリッスンするプロセスがあります(実際には同じプロセスであると想定しています)。しかし、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の新しいインストールであり、このプロセスが何であるかは本当にわかりません。何か案が ?

回答 あなたのコメントに感謝します。nfs-server nfs-commonをアンインストールし(dkpg --get-selections | grep nfs searchの後)、不明なプロセスが消えました。奇妙なことに、カーネルプロセスはどのようにもマークされていません。

再びお二人に感謝します。;)

回答:


57

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については、その1つである@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

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

参照資料


@derobert-スレッドだと思っていました。
slm

@slm(ユーザースペース)スレッドにはPIDがあります。
デロバート

@derobert-それは私が考えていたことですが、確かにダブルチェックしていました。
slm

@derobert-「Linuxカーネル自体がNFSサーバー(別名「knfsd」)を提供します。したがって、カーネルはプロセスではないため、関連するプロセスはありません。」
slm

@JohnDoe-NFSに関連している可能性があります。
slm

16

別のオプションは、ソケットがプロセスに属しておらず、カーネルに属していることです。これの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を取得するには、offのままにして-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

1
rpcinfo -pIPv4でのみ機能することを指摘していただきありがとうございます
youfu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.