UNIX - 6시간 이상 실행된 프로세스 식별

UNIX - 6시간 이상 실행된 프로세스 식별

UNIX에서 어떤 프로세스가 6시간 이상 실행되고 있는지 알고 싶습니다. 어떻게 찾을 수 있나요?

답변1

사용 가능한 항목에 따라 일반적인 접근 방식은 다음과 같습니다.

ps -o pid,lstart

다음을 사용하여 결과에 대해 for 루프를 실행합니다.

date -j -f %c "$sdate" +%s

날짜를 UNIX 타임스탬프로 변환합니다. 거기에서 그것은 다음과 같습니다 :

time=$((`date +%s`-`date -j -f %c "$sdate" +%s`))
echo $time

프로세스가 실행된 시간(초)을 알려주어야 합니다. 시간으로 변환하는 것은 간단해집니다.

즉, 스크립트 작성을 마치게 됩니다.

답변2

다음 기능을 사용하여 프로세스 실행 시간을 분 단위로 얻을 수 있습니다.

GetProcTime() {
    local p=$1
    ps -eao "%C %U %c %t" | 
    awk "/$p/"'{print $4}' | 
    awk -F":" '{{a=$1*60} {b=a+$2}; if ( NF != 2 ) print b ; else print $1 }'
}

시험

root@ubuntu:/tmp# GetProcTime monit
10
root@ubuntu:/tmp# if [[ $(GetProcTime monit) -ge 360 ]]; then echo "Process is running more than 6 hrs"; else echo "OK"; fi
OK
root@ubuntu:/tmp# GetProcTime init
466
root@ubuntu:/tmp# if [[ $(GetProcTime init) -ge 360 ]]; then echo "Process is running more than 6 hrs"; else echo "OK"; fi
Process is running more than 6 hrs

답변3

이 명령은 어제부터 n시간 이상 실행된 프로세스를 출력합니다. 프로세스는 오늘의 프로세스만 스캔합니다.

ps -Ao ppid,pid,user,stime,cmd --sort=-pcpu | awk -v dateee=$(date +%H) '{ if (substr($4,3,1) ==":"  && ( dateee-substr($4,1,2) > 5 ))   print }' 

요구 사항에 따라 다음 섹션을 변경할 수 있습니다. 예를 들어 5시간.

dateee-substr($4,1,2) > 5 )

답변4

ps -o etimePOSIXly 및 C/POSIX 로케일에서는 에 의존할 수 있어야 합니다 [dd-]hh:mm:ss. 따라서 최소 6시간 동안 실행된 프로세스는 0이 아닌 dd-부분이 있거나 해당 hh부분이 06보다 큰 프로세스가 됩니다.

LC_ALL=C ps -Ao etime,pid |
  LC_ALL=C awk '$1 ~ /[1-9].*-|([1-9].|0[6-9]):..:/ {print $2}'

6시간 이상 실행된 프로세스의 pid가 보고됩니다.

프로세스는 수명 동안 여러 명령을 실행할 수 있으며 종종 실행합니다.

관련 정보