我需要能够杀死在特定父级下运行的所有子进程.什么是更好的选择呢?使用PPID还是PGID?

像这样的东西:

pkill -TERM -P

会使用PPID杀死孩子.但是我已经在这里和那里阅读了关于PGID的点点滴​​滴,我很想知道一个人是否比另一个更好.


解决方法:

除非父级捕获并重新发送信号,否则杀死父进程不会终止子进程.

使用TERM杀死进程组会将TERM信号发送给进程组的所有成员,这样就可以了,但是您应该确保父进程启动进程组(或者父进程创建进程组并且您不要关心父母的父母可能获得TERM信号,如果它还活着的话.

如果您正在使用shell来启动父项(或父项的父项),那么您不必担心这一点,因为shell中的每个命令调用都会启动一个进程组.

(有一个特定于Linux的功能可用于告诉内核在其父级死亡时向子进程发送信号,但在您的标准Unix中,据我所知,这不会发生.查看prctl(2)并搜索DEATHSIG,如果你想了解更多关于它的信息).

标签: linux, ps, process

相关文章推荐

添加新评论,含*的栏目为必填