Linux + Solaris 如何从进程列表中验证最后执行的进程

Linux + Solaris 如何从进程列表中验证最后执行的进程

我需要建议:

如何验证哪个是我的 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)。

相关内容