ruby - 我怎样才能杀死一个正在重新初始化自己的进程?

标签 ruby linux unix process kill

我有一个程序需要重新设置自己的父级来初始化,所以我不能使用下面的代码:

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/

相关文章:

C UNIX - 如何在服务器端使用多个套接字接收UDP消息以过滤它们?

linux - 查找,grep gzipped 文件

ruby-on-rails - 销毁操作中的重定向无法正常工作

ruby-on-rails - 使用 CanCan 通过父关联授权子对象

java - 如何为虚拟屏幕运行我的 Java 应用程序?

linux - 如何解析 shell 脚本中的命令输出

linux - 无 MMU 系统中是否需要内核驱动程序和 ioremap?

linux - 使用 linux 将数据转换为所需的形式

ruby - 正则表达式匹配文件中的空行和注释

ruby - 简介 Jekyll 构建时间