父节点死亡时,Node.JS子进程被杀死

JHH*_*JHH 12 linux child-process node.js

我正在使用child_process.spawn()从我在Ubuntu上运行的Node.JS应用程序启动脚本.据我所知,标准分叉或生成的*nix进程通常不会在父进程死亡时死亡,但是当从Node.JS生成进程时,它们似乎在我的应用程序崩溃时被杀死,或者被ctrl-c等中止.

为什么会这样,有没有办法解决这个问题?我似乎无法在child_process API中找到任何明显的选项.

我的应用程序启动了一些应该在后台运行的长时间运行的任务,如果我的节点服务器崩溃或由于其他原因重新启动我不想中断任务,而是希望节点服务器重新启动,优雅地恢复监视那些正在运行的任务的进度.

Joh*_*hny 22

你需要设置分离选项

如果设置了分离选项,则子进程将成为新进程组的领导者.这使得孩子可以在父母退出后继续跑步.

var child = spawn('prg', [], {
   detached: true,
   stdio: [ 'ignore', out, err ]
 });
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢.不知道我怎么设法错过了.作为参考,如果其他人发现这个答案有用,请参考手册:https://nodejs.org/api/child_process.html#child_process_options_detached (2认同)
  • 不指定 stdio 将默认为 stdio: ['pipe', 'pipe', 'pipe']... 这意味着管道可通过 ChildProcess.stdin、ChildProcess.stdout 和 ChildProcess.stderr(在这种情况下**我认为** 您必须从 stdout 和 stderr 读取,否则您的子进程可能会挂起)...到 /dev/null (2认同)