我有一個長時間的運行過程,我需要它啓動另一個進程(這也將運行很長時間)。我只需要啓動它,然後完全忘記它。如何觸發並忘記子進程?
我設法通過從Programming Ruby書籍中挖出一些代碼來做我所需要的,但我想找到最好/正確的方法,並理解正在發生的事情。下面是我最初:
exec("whatever --take-very-long") if fork.nil?
Process.detach($$)
所以,這是這樣的,或者我應該怎麼回事辦呢?
檢查下面我結束了這段代碼,這似乎更有意義的答案後:
(pid = fork) ? Process.detach(pid) : exec("foo")
我會很感激如何fork
作品一些解釋。 [已經得到]
正在分離$$
對不對?我不知道爲什麼這會起作用,我真的很想更好地掌握情況。
好吧,我想我得到了.nil?檢查。在孩子中它並不真的返回0,它返回零。所以,如果你在孩子身邊,執行將會運行。 那麼,我將如何捕獲fork的另一個返回值,即返回子進程的id的那個返回值?這樣我就可以直接使用它,而不是依賴$$。 – kch 2009-04-30 10:24:22
只是調用fork並捕獲結果。那麼如果你得到零,做執行,否則你在父母。 – Alnitak 2009-04-30 10:27:07
這是一個非常清晰和簡潔的'fork'定義。很棒的工作,謝謝。 – KomodoDave 2013-01-30 15:09:36