如何杀死除最新程序之外正在运行的程序的所有实例

如何杀死除最新程序之外正在运行的程序的所有实例

我有一个问题,我的脚本不断生成新的 ssh 进程。我知道这不应该发生,但我想时不时地清理一下旧的。

如果我做 :

ps -ef | grep "ssh" | awk '{print $2}'

我获得了正在运行的 ssh 进程的所有 PID 列表。

我想杀死所有的进程,除了最后生成的一两个进程(PID 号最高的进程)。

我该怎么办呢?

答案1

while [ $(pgrep -c ssh) -gt 1 ]
do
  pkill --oldest -f ssh
done

只要有多个ssh进程,就杀死最旧的(“最近最少启动的”)进程。如果您的 PID 空间环绕或者您使用了随机 PID,那么最近最少启动可能是比“最低 PID”更好的指标。

相关内容