killall,不包括特定进程ID

时间:2014-11-25 11:19:21

标签: bash kill

好的,所以我最近遇到了一个案例,我最终得到了我不需要的重复流程。现在显然我想弄清楚为什么我会以重复的方式结束,但同时我想知道是否有更好的方法来清除它们。

目前,我正在运行killall <process name>,然后手动触发该流程的单个实例。但是,我真正想做的是运行一个killall,它会以某种方式忽略特定的进程ID。

实际上,有问题的过程是一个具有唯一名称的bash脚本,因此我可以使用killall轻松删除它的所有副本,并且我想编辑它以便在启动时,除了当前进程($$)之外,它会杀死其自身的所有其他实例,以防止它变得更容易。

我知道我可以使用psgrep执行此操作,并在过滤掉当前进程ID后将结果提供给kill,但这是唯一的方法,还是在那里一个更好的选择(除了首先防止重复,我还没有想到)?

2 个答案:

答案 0 :(得分:1)

我建议使用pgrep代替它,它会给你一个具有给定名称的进程PID列表,这样你可以做一些像pgrep java这样的事情,并且比ps和grep <更容易获得列表/ p>

答案 1 :(得分:0)

这是你要找的东西吗?

杀死$(ps aux | awk&#39; {print $ 2}&#39; | grep -v)