2014-11-25 55 views
0

好吧,所以我最近遇到了一个案例,我最后得到了我不需要的重复过程。现在很明显,我试图弄清楚为什么我会以重复的方式结束,但同时我想知道是否有更好的方法来清除它们。killall,不包括具体的进程ID

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

实际上,有问题的过程是一个带有独特名称的bash脚本,所以我可以很容易地用killall杀死它的所有重复项,并且我想编辑它,以便在启动时它将杀死所有除了当前进程($$)之外的其他自身实例,以便更容易。

我知道我大概可以用psgrep做到这一点,并过滤掉当前的进程ID后的结果反馈到kill,但是这是唯一的办法,还是有更好的选择(除了防止重复第一地方,我还没有想出)?

回答

0

这是你要找的东西吗?

杀$(ps的辅助| awk的“{打印$ 2}” | grep的-v)

+0

你是不是指'grep -v“$$”'去结束那里?这或许可以在开始时使用合适的过滤器。例如,要整合@ Konato_K的答案可能是这样的:'pgrep“$(basename”$ 0“)”| grep -v“$$”'就足够了?它可能需要通过'xargs'然后被送入'杀死',虽然? – Haravikk 2014-11-27 10:58:18

1

我建议使用pgrep相反,它会给你指定名称的进程的PID的列表,这样你就可以做一些像pgrep java,并获得列表比容易与ps和grep