3時間以上実行されたプロセスのリスト

3時間以上実行されたプロセスのリスト

メモ:

以前のバージョンを使用していますが、時間を秒単位で確認するpsオプションはありません。-o etimesだから解決策は2時間以上実行されたプロセスの一覧表示ここでは直接使用できません。


3時間以上実行されたプロセスを一覧表示したいです。以下は、プロセスの一覧表示に使用するコマンドです。

注文する

ps -Ao stime,etime,cmd --sort=start_time | grep "/home/mose/bin/hi.sh" | grep -v "grep"

出力

Jun06 1-03:36:53 /bin/ksh /home/mose/bin/hi.sh -j KendaEVALUATION_7 -o 220606
Jun06 1-03:36:53 /bin/ksh /home/mose/bin/hi.sh -j KendaEVALUATION_5 -o 220606
Jun06 1-03:36:53 /bin/ksh /home/mose/bin/hi.sh -j KendaEVALUATION_8 -o 220606
Jun06 1-03:36:53 /bin/ksh /home/mose/bin/hi.sh -j KendaEVALUATION_6 -o 220606
07:54 03:43:46 /bin/ksh /home/mose/bin/hi.sh -j Kenda -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_6 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaFRONTOFFICE_5 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_4 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_8 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_5 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_3 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_2 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_7 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_1 -o 220607
08:30 03:07:01 /bin/ksh /home/mose/bin/hi.sh -j JituSUBT -o 220607
08:40 02:56:58 /bin/ksh /home/mose/bin/hi.sh -j JituREFRESH -o 220607
09:10 02:27:32 /bin/ksh /home/mose/bin/hi.sh -j KendaWOCAS -o 220607
09:56 01:41:33 /bin/ksh /home/mose/bin/hi.sh -j KendaBACKOFFICE_CCB_KUA_4 -o 220607

それでは、3時間以上実行されたプロセスのみを一覧表示するにはどうすればよいですか?

答え1

プロセスが3時間以上実行されている場合、-2番目のフィールドに1つが表示されるか(1日以上実行されたため、次の内容が表示されます)、2番目のフィールドの最初の1-03:36:53数字が表示されます。 3以上でなければなりません。したがって、コマンドを少し単純化するには、次のようにします。

ps -C hi.sh -o stime,etime,cmd --sort=start_time |
    awk '$2 ~ /-/ || $2 ~ /^(0[3-9]|[12]):[0-9]+:[0-9]+/'

出力ps例では、以下が生成されます。

Jun06 1-03:36:53 /bin/ksh /home/mose/bin/hi.sh -j KendaEVALUATION_7 -o 220606
Jun06 1-03:36:53 /bin/ksh /home/mose/bin/hi.sh -j KendaEVALUATION_5 -o 220606
Jun06 1-03:36:53 /bin/ksh /home/mose/bin/hi.sh -j KendaEVALUATION_8 -o 220606
Jun06 1-03:36:53 /bin/ksh /home/mose/bin/hi.sh -j KendaEVALUATION_6 -o 220606
07:54 03:43:46 /bin/ksh /home/mose/bin/hi.sh -j Kenda -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_6 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaFRONTOFFICE_5 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_4 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_8 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_5 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_3 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_2 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_7 -o 220607
08:01 03:36:54 /bin/ksh /home/mose/bin/hi.sh -j KendaWORKING_TIME_1 -o 220607
08:30 03:07:01 /bin/ksh /home/mose/bin/hi.sh -j JituSUBT -o 220607

このコマンドは、2番目のフィールド()にaまたは()で始まるか、aの後に3から9の間の数字()または()1または2()が続く行を検索し、次に()で続く行をawk検索します。 ) 2 つの数値セットを分離しました。$2-^00[3-9]|[12]:[0-9]+:[0-9]+

答え2

マニュアルページによると、etimeフィールドの形式は[[DD-]hh:]mm:ssPerl正規表現のようなものと一致し、/(((\d+)-)?(\d+):)?\d+:\d+/合計で日付と$3時刻をキャプチャできるようになっています$4。 (\d+任意の桁に一致し、(...)?は選択グループで、すべての括弧は一致する部分をキャプチャします。日付と時刻は左から3番目、4番目の開き括弧に対応する部分です。)

したがって、次のようになります。

ps -Ao stime,etime,cmd --sort=start_time  | 
  perl -ane '$F[1] =~ /(((\d+)-)?(\d+):)?\d+:\d+/; print if $3 > 0 || $4 >= 3'

autosplit(-a)がオンの場合、入力行のフィールドが配列に表示されます@F。このコードスニペットは、入力の2番目のフィールド$F[1](0から始まる番号)を取得し、上記の正規表現と一致します。次に、日数が0より大きい場合、または時間数が3以上の場合は、その行を印刷します。値がない場合、未定義の値でキャプチャされ、0 と比較されるため、12:34同じ結果が得られ、00:12:34一致はありません。

関連情報