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

POSIXly,并且在 C/POSIX 语言环境中,您应该能够依靠ps -o etime[dd-]hh:mm:ss.因此,已经运行至少 6 小时的进程将是存在非零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。

请注意,一个进程可以(并且经常)在其生命周期中运行多个命令。

相关内容