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