Plackup和Starman的舞者;分叉已经失效的starman进程?

时间:2012-12-14 00:01:08

标签: perl perl-module fork dancer plack

作为我在这里的另一个问题的后续跟进:Forking to Run Code in a Child Process With Perl's Dancer - 如何在plackup / starman / dancer下运行请求而不会导致孩子处于僵尸状态?

例如我正在尝试做的事情:

post '/handle_data' => sub {

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

};

......导致星际工作者被回收,但剩下的放弃过程将会解散。

从perlipc,我也试过设置$SIG{CHLD} = "IGNORE",但无济于事。

1 个答案:

答案 0 :(得分:2)

分叉时,您必须让父进程不退出,而是等待子进程pid。 如果我记得fork要么设置返回值,要么使用子项的pid设置特殊变量;所以你需要抓住它。哦,注册一个类似等待的$SIG{INT}处理程序。

您可能希望使用waitpid