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시간 이상 실행된 경우 -두 번째 필드에 하나가 표시되거나(하루 이상 실행되었으므로 다음과 같은 내용이 표시됨 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

이 명령은 두 번째 필드( )에 a 또는 ( )로 시작 하거나 a 뒤에 3과 9 사이의 숫자( ) 또는 ( ) 1 또는 2( )가 오는 줄을 검색한 다음 ( )로 계속되는 줄 awk을 검색합니다. ) 두 개의 숫자 세트를 분리했습니다.$2-^00[3-9]|[12]:[0-9]+:[0-9]+

답변2

매뉴얼 페이지에 따르면 etime필드의 형식은 [[DD-]hh:]mm:ssPerl 정규식과 같은 것이 일치하고 /(((\d+)-)?(\d+):)?\d+:\d+/합계에서 날짜와 $3시간을 캡처할 수 있도록 되어 있습니다 $4. ( \d+임의의 자릿수와 일치하며, (...)?는 선택그룹으로, 모든 괄호는 일치하는 부분을 캡쳐합니다. 날짜와 시간은 왼쪽에서 세 번째, 네 번째 여는 괄호에 해당하는 부분입니다.)

따라서 다음과 같습니다.

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. 이 코드 조각은 입력의 두 번째 필드 $F[1](0부터 시작하는 번호)를 가져와 위의 정규식과 일치시킵니다. 그런 다음 일 수가 0보다 크거나 시간 수가 3 이상이면 해당 줄을 인쇄합니다. 값이 없으면 정의되지 않은 값으로 캡처되어 0과 비교되므로 12:34동일한 결과가 제공되고 00:12:34일치 항목이 없습니다.

관련 정보