《衣襟下的舞者》和《星人》;分叉留下了已不存在的星际人进程



作为我在这里的另一个问题的后续:使用 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。

最新更新