作为我在这里的另一个问题的后续跟进: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"
,但无济于事。
答案 0 :(得分:2)
分叉时,您必须让父进程不退出,而是等待子进程pid。
如果我记得fork
要么设置返回值,要么使用子项的pid设置特殊变量;所以你需要抓住它。哦,注册一个类似等待的$SIG{INT}
处理程序。
您可能希望使用waitpid。