您可能希望在不同的登录 shell 中执行查杀(最终通过脚本),以确保您不会意外停止/杀死试图在完成其工作之前进行整体查杀的 shell/脚本:)
第一个关键策略是不直接终止进程,而是:
kill -STOP <pid>)以防止它生成其他子级(需要可靠地确定其子级,否则您会错过一些问题,如本问答中所述: https: //superuser.com/questions/927836/how-处理 linux/927967#927967 上的内存泄漏叉炸弹)一旦基于 ppid 的整个祖先树被冻结,您就可以开始根据进程组查找和冻结祖先 - 只要更改其进程组的进程的父进程仍然存在,您仍然可以可靠地确定这些进程组(因为它们的 ppid未更改) - 将这些组添加到要核化的 pgids 列表中,并冻结您可能在这些组中找到的任何新的基于 ppid 的进程子树,如下所示:
通过会话 ID 可以发现相关进程,其方式与基于组 ID 的方式非常相似(除了需要通过 pid 来进行查杀,因为 Kill cmd 支持组 ID,但不支持会话 ID)。
查找潜在相关进程的另一种方法是通过它们的 tty(如果有的话)。但要小心 - 它们可能不是您想要杀死的进程的后代,而是祖先或兄弟姐妹。您仍然可以在调查时冻结以这种方式找到的基于 ppid 的子树和组 -kill -CONT如果不需要杀死它们,您可以稍后“解冻”它们(使用 )。
如果它们的父母去世并且没有 pty,我不知道如何找到由声明自己为会话领导者的进程解耦的后代进程子树(从而更改其 sid 和 pgid)。
一旦整个子树列表被冻结,进程就可以被终止(根据需要通过 pid 或 pgid)或解冻以继续其工作(如果需要)。
| 归档时间: |
|
| 查看次数: |
2715 次 |
| 最近记录: |