web-dev-qa-db-ja.com

完全なプロセス引数と関連するリスニングポートを見つける方法は?

実行できますnetstat -atulpn | grep JavaすべてのJavaプロセスとそれに付随するポートを見つけることは素晴らしいことですが、プロセスの完全な実行引数も表示したいと思います。これが可能であるとは思わないこれまでに調べたすべてのことからnetstatなので、netstatの出力を処理するスクリプトを作成してから、pidをpsに渡す必要があると考えていました。次に、出力をプリティファイして、ip + portと完全なコマンドラインを表示します。

これを行うためのより良い方法はありますか、それともこれが唯一のオプションについてですか?

4
ylluminate

ss -lnptuは、ps-pの呼び出しでawkにパイプされます。私はモバイルデバイスを使用しているので、現時点で完全な例を入力するのは少し難しいです。

リスニングソケット:

ss -lnptu | awk 'NR>1 { split($7,p,","); printf "Listen: "$5 " Command: "; system("ps --no-headers -o args p "p[2]); }'

すべてのソケット(TIME_WAITなどにプロセス情報がないソケットのため、追加のフィルタリングが必要になる可能性があります):

ss -anptu state listening state established state connected state unconnected | grep -v TIME_WAIT | awk 'NR>1 { split($7,p,","); printf "Listen: "$5 " Command: "; system("ps --no-headers -o args p "p[2]); }'

4
Mark Sturgill

Mark Sturgillの回答をそのまま使用すると、Ubuntu16.04のpsからエラーが発生していました。それを機能させるためにわずかな変更が必要でした:基本的に、数値PIDをsplitが返す結合形式(例:pid=1306 -> 1306)からさらに分離するために追加のssを追加しました。また、psに完全な引数を出力させるために-wwフラグを追加しました。

ss -lnptu | awk 'NR>1 { split($7,p,","); split(p[2],pid,"="); printf "Listen: "$5 " Command: "; system("ps --no-headers -ww -o args p "pid[2]); }'
1
luckman212

@ ylluminate、CentOSの場合はss -lnptu | awk 'NR>1 { split($6,p,","); printf "Listen: "$4 " Command: "; system("ps --no-headers -o args p "p[2]); }'に変更します

0
Denis Yusupov