我需要建议:
如何验证哪个是我的 linux 或 solaris 中运行的最后一个 scan_sys.sh 进程?
我的目标是杀死所有 scan_sys.sh 进程,除了最新的 scan_sys.sh (最后执行 /usr/scan_sys.sh 脚本)
ps -ef | grep scan_sys.sh
。
root 367 1 0 Nov 08 ? 0:21 /usr/scan_sys.sh
root 27517 27515 0 17:27:18 ? 0:01 /usr/scan_sys.sh
root 18939 367 0 Nov 15 ? 0:00 /usr/scan_sys.sh
root 18940 18939 0 Nov 15 ? 0:01 /usr/scan_sys.sh
root 27515 367 0 17:27:18 ? 0:00 /usr/scan_sys.sh
答案1
使用ps
选项选择-o
要显示的字段以显示进程 pid、启动时间和命令名称,可以选择立即选择您感兴趣的进程 ( -C
),按启动时间排序,杀死除最后一个之外的所有进程。
由于ps
众所周知是命令行选项地狱,因此您必须检查手册页以了解您的实现。对我来说,相当于 Linux 上的以下工作(列出适当的 PID):
ps -C scan_sys.sh -o pid --sort start | sed '$d'
请记住用单引号引用$
insed
脚本(至少在 in 中bash
),否则它将扩展到环境变量d
。您可以发送 PID 来杀死,例如通过 xargs 或通过命令替换(``
或$()
in bash
)。