當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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