当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Process.detach用法及代码示例


本文简要介绍ruby语言中 Process.detach 的用法。

用法

detach(pid) → thread

某些操作系统会保留已终止子进程的状态,直到父进程收集该状态(通常使用 wait() 的某些变体)。如果父级从未收集此状态,则子级将作为zombie 进程保留。 Process::detach 通过设置一个单独的 Ruby 线程来防止这种情况,该线程的唯一工作是在进程终止时获取进程 pid 的状态。仅当您不打算显式等待子进程终止时才使用分离。

等待线程终止时返回被分离进程的退出状态,所以可以使用 Thread#join 知道结果。如果指定的 pid 不是有效的子进程 ID,则线程立即返回 nil

等待线程具有返回 pid 的 pid 方法。

在第一个示例中,我们没有收获第一个子进程,因此它在进程状态显示中显示为僵尸。

p1 = fork { sleep 0.1 }
p2 = fork { sleep 0.2 }
Process.waitpid(p2)
sleep 2
system("ps -ho pid,state -p #{p1}")

产生:

27389 Z

在下一个示例中, Process::detach 用于自动收割子节点。

p1 = fork { sleep 0.1 }
p2 = fork { sleep 0.2 }
Process.detach(p1)
Process.waitpid(p2)
sleep 2
system("ps -ho pid,state -p #{p1}")

(produces no output)

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Process.detach。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。