【问题标题】:Dancer Under Plackup and Starman; forking leaves defunct starman processes?Plackup 和 Starman 下的舞者;分叉会留下失效的starman进程吗?
【发布时间】:2012-12-14 00:01:08
【问题描述】:

作为我在此处的另一个问题的后续: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

};

... 导致 starman 工人被回收,但剩余的 plackup 进程失效。

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

【问题讨论】:

    标签: perl perl-module fork dancer plack


    【解决方案1】:

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

    您可能希望使用waitpid

    【讨论】:

    • 是的。一个父进程不等待它的进程在退出时会变成一个已失效/僵尸,init (pid 1) 会采用它,但在您重新启动之前它不会从进程表中清除。
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多