所以我正在尝试开发一个可以找到特定进程的脚本,并杀死运行时间最长的进程。试图按经过时间排序命令正成为问题。这是我正在运行的命令,我知道有很多|并且可能更清洁为什么要做这一切,但我使用awk相当新。
ps -eo pid,cmd,stat,etime --sort=etime | grep cassi32 | awk '$3 == "/rESTECH"' | awk '$4 == "S"'
,我得到的输出就是这个。
5703 cassi32 /rESTECH S 00:40
65504 cassi32 /rESTECH S 1-21:45:39
65520 cassi32 /rESTECH S 03:21:39
65521 cassi32 /rESTECH S 3-15:02:37
65531 cassi32 /rESTECH S 1-21:44:39
正如您所看到的那样,etime列似乎没有按任何特定顺序排列,而是按PID排序。
有关如何通过etime排序的任何想法。一旦完成,我可以照顾杀戮部分。
答案 0 :(得分:4)
您拥有的ps
版本(以及我正在测试的版本)似乎在基于时间的密钥的某些子集上正确排序时遇到问题。这似乎做你想要的,但是:
ps -eo pid,cmd,stat,etime --sort start_time | awk '$2 == "cassi32" && $3 == "/rESTECH" && $4 == "S"'
按start_time
排序似乎更可靠,至少在我的系统上,它与etime
或已用时间直接相关。
答案 1 :(得分:1)
您可以将命令行缩减为:
ps -eo pid,cmd,stat,etime --sort=etime |
awk '/cassi32/ && ($3=="/rESTECH") && ($4=="S")'
但是上面做任何排序的唯一事情是你的ps
命令,所以如果那不是你想要的订单,那么请阅读你的ps
手册页以找出你真正应该选择哪些选项正在使用。
我可以访问多台UNIX计算机但没有一台ps
支持您正在使用的选项,因此我无法对其进行测试。