我有一个程序需要重新设置自己的父级来初始化,所以我不能使用下面的代码:
pid=Process.spawn("xxx")
Process.wait(pid) #started xxx with pid,
#but it respawned itself to
#pid2 which has the ppid set to 1
我不确定是否有办法追踪新的 pid 是什么。
最佳答案
这个问题有点畸形。但是您可以使用 cgroups 来执行此操作。为您的事件创建一个新的 cgroup 挂载点。这将有一个包含系统中所有进程的“任务”文件。然后你可以创建这个目录的子目录,这将自动得到他们自己的(空)任务文件。只需将进程的 PID 写入此新任务文件即可。它及其所有子项将始终出现在该任务文件中,而不是系统其余部分的文件中。 “逃离”cgroup 的唯一方法是对任务文件具有写入权限。
是的,这听起来很复杂,但实际上并非如此。这是 systemd 用来跟踪进程树的机制,可能出于与您想要的相同的原因:杀死进程的所有子进程,而不管他们的父进程发生了什么。
显然,对于您的问题,更简单的答案可能是“使用 systemd”。
关于ruby - 我怎样才能杀死一个正在重新初始化自己的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864676/