最大のファイル記述子を持つプロセスを見つけようとしています。
このソリューションを見つけました。ここ
lsof -Fpcn | awk '
/^p/ { pid=substr($0,2) }
/^c/ { cmd=substr($0,2) }
/^n/ { fd[cmd"["pid"]"]++ }
END { for (cc in fd) printf("%-20s %i\n",cc,fd[cc]) } ' | sort -n -k 2
このコマンドセットはうまく機能します。
記述子が15未満のプロセスをフィルタリングできます。
プロセスの詳細を指定したいので、
psからプロセスに関する情報を抽出したいと思います。たとえば、次のようになります。
ps -ef | grep 30394
次のようにフィルタリングできます。
END {
for (cc in fd) {
if(fd[cc] > 15){
printf("%-20s %i\n",cc,fd[cc])
}
}
} ' | sort -n -k 2
しかし、プロセス情報を取得する方法がわかりません。
ps -efを次のようにマージしようとすると:
printf("%-20s %i process details: %s \n",cc,fd[cc] , "$(ps -ef | grep fd[cc])" ) ;
次のように印刷されます。
lsof[7626] 17 process details: $(ps -ef | grep fd[cc])