我想杀死一条过程链。
PID PPID
100 XXX
101 100
102 101当我按照预期使用pkill -P 100 PID 100和101DIE时,但是102是按PPID的方式给出的。
我怎样才能强迫pkill继续杀死经过进程的直接后代的链式进程?
发布于 2016-06-22 23:53:26
pkill正按照您的要求做:它杀死了父进程为100的进程。不是父进程的父进程是100。
Linux的pkill和FreeBSD都没有遍历进程树的选项。您可以调用pstree -l并解析其输出。
请记住,如果A叉B,B叉C,然后B死亡,没有父子关系可以连接A和C。
也许有一种方法可以杀死所有这些进程,但请注意,它可能会过于匹配。
如果将一个负进程ID传递给kill,则会杀死整个过程组。这是原子化的,所以即使在运行kill时其中一个进程分叉也能工作。这只会杀死没有将自己放在自己组中的进程,如果父进程和其他进程位于同一个进程组中,则还会杀死父进程和其他进程。运行ps -o pgid …查看进程的进程组ID。
如果要杀死的所有进程都打开了特定的文件,则可以使用fuser -k /some/file关闭打开该文件的所有进程。
在Linux上的另一个选择是在它们自己的PID命名空间中运行进程.。然后,您可以通过在名称空间中杀死伪PGID -1来杀死整个命名空间。
https://unix.stackexchange.com/questions/291491
复制相似问题