本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。