本文简要介绍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 Process.groups用法及代码示例
- Ruby Process.wait2用法及代码示例
- Ruby Process.getpgrp用法及代码示例
- Ruby Process.setproctitle用法及代码示例
- Ruby Process.setrlimit用法及代码示例
- Ruby Process.uid用法及代码示例
- Ruby Process.pid用法及代码示例
- Ruby Process.maxgroups用法及代码示例
- Ruby Process.clock_gettime用法及代码示例
- Ruby Process.exec用法及代码示例
- Ruby Process.groups=用法及代码示例
- Ruby Process.clock_getres用法及代码示例
- Ruby Process.getsid用法及代码示例
- Ruby Process.getpriority用法及代码示例
- Ruby Process.times用法及代码示例
- Ruby Process.getpgid用法及代码示例
- Ruby Process.euid用法及代码示例
- Ruby Process.exit用法及代码示例
- Ruby Process.setpriority用法及代码示例
- Ruby Process.kill用法及代码示例
- Ruby Process.initgroups用法及代码示例
- Ruby Process.spawn用法及代码示例
- Ruby Process.egid用法及代码示例
- Ruby Process.last_status用法及代码示例
- Ruby Process.setsid用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Process.detach。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。