2012-12-14 30 views
1

作爲我在這裏的另一個問題的後續:Forking to Run Code in a Child Process With Perl's Dancer - 如何在plackup/starman/dancer下分發請求,而不會導致孩子被置於殭屍狀態?Plackup和Starman下的舞者;分叉離開失效的星際過程?

例如我想要做的事:

post '/handle_data' => sub { 

# perform some calculations 
... 
# store some data 
... 
fork and return; # parent request 
# do some long running tasks 
... 
exit; # child 

};

...導致星級工人被回收,但一個剩餘的plackup過程被廢除。

從perlipc,我也試過設置$SIG{CHLD} = "IGNORE",但無濟於事。

回答

2

分叉時,你會有父進程不退出,而是等待孩子的PID(S)。 如果我記得fork要麼與孩子的PID設置返回值或特殊變量;所以你需要抓住這一點。哦,並註冊一個類似等待的$SIG{INT}處理程序。

您可能正在尋找使用waitpid

+1

是的。當父進程退出時,父進程不等待的進程將成爲退出/殭屍進程,但init(pid 1)會採用該進程,但在重新引導之前它不會從進程表中清除。 –