我使用ps
命令作为练习的一部分来识别运行时间超过给定阈值的进程。
我使用以下模板来获取已知进程命令的运行时间:
ps -eo etime,command | grep <something to identify a process> | grep -v grep | awk '{print $1}'
我注意到,对于短时间运行的进程,etime(经过时间)值采用以下格式minutes:seconds
,由此我可以轻松确定进程运行了多长时间。
对于运行时间很长的进程(长达数天),我不理解其格式。
我有一个 MySQL 服务器进程htop
显示运行了 126 小时。
执行ps -eo etime,command | grep mysql | grep -v grep | awk '{print $1}'
给我的值为9-03:35:32
.
我最好的猜测是,这意味着 9 个小时,3 小时 35 分 32 秒。我不知道9的单位是什么。
该进程已运行 126 小时,约 5.25 天。这表明上述输出中的 9 并不代表天数。它们也不能是半天,因为 (9 * 12) 小时 + 3 小时 + 35 分钟 + 32 秒小于 5 天。
如何解释我看到的长时间运行进程的经过时间值?上述输出中 9 旁边的单位是什么?
答案1
根据标准:
在 POSIX 语言环境中,自进程启动以来所经过的时间,格式为:
[[dd-]hh:]mm:ss
其中dd代表天数,hh代表小时数,mm代表分钟数,ss代表秒数。 dd 字段应为十进制整数。 hh、mm 和 ss 字段应为两位十进制整数,左侧补零。
所以,不管你信不信,9 意味着天。您是否会误解 htop 的输出? top(时间格式为minutes:seconds
)说什么?您确定您在 htop 中查看的字段相当于 etime 吗? (例如,这是否意味着 126分钟的中央处理器时间?)