按 etime 排序 PS 命令

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 进行排序的任何想法。一旦完成,我可以处理杀死部分。

twa*_*erg 5

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或经过的时间直接相关。