正規表現名を使用してプロセスを監視する方法は?

正規表現名を使用してプロセスを監視する方法は?

私は「#top -p 22055,21995」でいくつかのプロセスを監視していますが、それらの多くはすべてfwk*で始まります(つまりfwk3_dev、fwk5_dev)。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        
22055 admin      0 -20  832m 302m  41m S   20  2.5  14973:53 fwk3_dev                                                                                       
21995 admin      0 -20  834m 304m  41m S   14  2.6  10179:55 fwk5_dev 

プロセス名 fwk* の正規表現を使用して、'fwk' で始まるすべてのプロセスを監視するにはどうすればよいでしょうか?

答え1

top単独では実行できませんが、topバッチモード(-bオプション)で実行される簡単なシェルスクリプトを記述して、フィルタリングすることができます。それgrep を使用してループします。対話型ではありません。

例えば

while :; do clear; top -b -n 1 |grep ' fwk' ;sleep 1; done

grepオプションが指定されている場合は、正規表現を認識します-E。ただし、あなたの例は、先頭の空白と「fwk」だけで処理できます (同じ名前のユーザーがいる場合を除きます)。

いくつかのバージョンtop-dバッチモードで 1 回だけ実行するには、別のオプション (など) が必要になる場合があります。

答え2

# first generate a comma-separated list of matching PIDs
pids=$(ps a -o pid,args | awk '/[f]wk/ {print $1}' | xargs | sed -e 's/ /,/g')
# then run top with that list
top -p $pids

注意:fwk*リストの生成から実行までの短時間にプロセスが開始された場合top、そのプロセスは表示に含まれません。

関連情報