Del*_*ran 4 sorting awk kill ps
所以我正在尝试开发一个脚本来查找特定进程,并杀死运行时间最长的进程。试图按经过时间对命令进行排序正在成为问题。这是我正在运行的命令,我知道有很多 | 并且可能更清楚为什么要这样做,但我对使用awk还很陌生。
ps -eo pid,cmd,stat,etime --sort=etime | grep cassi32 | awk '$3 == "/rESTECH"' | awk '$4 == "S"'
Run Code Online (Sandbox Code Playgroud)
我得到的输出是这个。
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
Run Code Online (Sandbox Code Playgroud)
如您所见,etime 列似乎没有任何特定顺序,而是按 PID 排序。
关于如何按 etime 进行排序的任何想法。一旦完成,我可以处理杀死部分。
ps您拥有的版本(以及我正在测试的版本)似乎在对某些基于时间的键子集进行正确排序时存在问题。不过,这似乎可以满足您的要求:
ps -eo pid,cmd,stat,etime --sort start_time | awk '$2 == "cassi32" && $3 == "/rESTECH" && $4 == "S"'
Run Code Online (Sandbox Code Playgroud)
排序方式start_time似乎更可靠一些,至少在我的系统上,它与etime或经过的时间直接相关。