2017-11-27 23 views
1

私は24時間以上生きている私のサーバー上で実行されているすべてのルビープロセスを取得しようとしています。psコマンドとetime

ps -eo pid,etime,cmd | grep .rb | grep -v grep | awk '{print $1, $2}' 

出力::私はこの取得することができますPSで

この場合

PID ELAPSED 
23484 07:54:41 
23493 07:54:41 
23504 07:54:41 
23515 07:54:41 
23535 07:54:40 
23548 07:54:40 
23670 07:54:37 
31671 3-07:54:49 
31807 3-07:54:48 
31832 3-07:54:48 
32308 3-07:54:40 
32318 3-07:54:40 
32331 3-07:54:40 

を、6つの工程では、24時間以上にわたって実行されています。

この列をフィルタリングして、必要なものだけを取得するにはどうすればよいですか?

私の考えでは、AWKを使用する

awk '$2 > XXXX' 

のようなものだった。しかし、私は、経過列の単位が何であるかを知りません。代わりに、パイプラインで複数のコマンドを結合する

答えて

3

、あなただけAwk

ps -eo pid,etime,cmd --sort=start_time | awk '/\.rb/ && /[1-9]+[-]/' 

の意味で必要な時間と、フィルタ結果を実行しているに基づいて並べ替えるために、その--sort機能を単一psコマンドを使用することができますフィルタ/\.rb/ && /[1-9]+[-]/は、パターン.rb.はエスケープする必要があるメタキャラクタ)と数字(1つ以上の日数[1-9]+)とそれに続く-を含むフィルタ行を意味するので、形式が3-07:54:40の場合、その部分3-は24時間以上を示すためにマッチします。

POSIXロケール、プロセスは形で、開始されてからの経過時間でPOSIX documentation for ps

ETIME

によれば:ddは日数を表すものと [[dd-]hh:]mm:sshh時間数、mm分数、およびss秒数。 ddフィールドは10進整数でなければなりません。 hhmm、およびssフィールドは、左側に0が埋め込まれた2桁の10進整数でなければなりません。

関連する問題