lsof -i はソケットを開くプロセスを表示しません。

lsof -i はソケットを開くプロセスを表示しません。

特定のアプリケーションの各プロセスで使用されるソケット(プロセスごとに1つのソケット)を監視するためにlsofベースのスクリプトを作成しました。開いているファイルのリストをソケットに制限するために-iオプションを指定すると、一部のプロセスが失われます。

pid_list を 136 プロ​​セスの一定で正しい形式のカンマ区切りリストのままにします。結果が時々136未満の理由は何ですか?

$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
135
$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
134
$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
136

問題を再現するには1つのPIDのみが必要です。

$ clear ; lsof -p 5404  -a -i -nP -FpcnT
p5404
cprocess
nsource:port->dest:port
TST=ESTABLISHED
TQR=0
TQS=0
$ clear ; lsof -p 5404  -a -i -nP -FpcnT
### OOPS!!!
$ clear ; lsof -p 5404  -a -i -nP -FpcnT
p5404
cprocess
nsource:port->dest:port
TST=ESTABLISHED
TQR=0
TQS=0

プロセスは中断せずに実行されます。各プロセスには、LISTENまたはESTABLISHED状態のソケットがあります。ソケットはIPv4です。これはlsof 4.78を含むRHEL 5.11にあります。

lsof オプションを省略すると、-i常に正しい数のプロセスが印刷されます。ただし、すべてのプロセスのIPとポート番号が必要なため、この出力は私の目的には使用できません。

lsofが無視したプロセスはランダムであるようです。彼らは決して同じではありません。

lsofは何かに敏感だと思うが

2016-07-26 編集

回避策としてnetstatを試しましたが、同じ問題が発生しました。問題は、私のアプリケーションに限定されたり、自分のアプリケーションの機能とオペレーティングシステムの制限が組み合わされている可能性があります。 lsof/netstat が正しく報告できない問題があります。

ベストアンサー1

sudo権限を試してください。 sudo 権限でコマンドを実行しないと、一部のプロセスは表示されません。

おすすめ記事