Linux Node.JS在父进程死亡时终止子进程

Linux Node.JS在父进程死亡时终止子进程,linux,node.js,child-process,Linux,Node.js,Child Process,我正在使用child_process.spawn()从运行在Ubuntu上的Node.JS应用程序启动一个脚本。据我所知,标准的分叉或派生*nix进程通常不会在父进程死亡时死亡,但当从Node.JS派生进程时,它们似乎会在我的应用程序崩溃时死亡,或者使用ctrl-c等终止 为什么会这样?有没有办法解决这个问题?我似乎在child_进程API中找不到任何明显的选项 我的应用程序启动了一些应该在后台运行的长时间运行的任务,如果我的节点服务器崩溃或由于其他原因重新启动,我不想中断这些任务,相反,我希望

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

为什么会这样?有没有办法解决这个问题?我似乎在child_进程API中找不到任何明显的选项


我的应用程序启动了一些应该在后台运行的长时间运行的任务,如果我的节点服务器崩溃或由于其他原因重新启动,我不想中断这些任务,相反,我希望节点服务器重新启动并正常地继续监视那些正在运行的任务的进度。

您需要设置“分离”选项

如果设置了分离选项,则子进程将成为 新流程组的负责人。这使孩子有可能 在父级退出后继续运行


谢谢。不知道我是怎么错过的。作为参考,如果其他人觉得这个答案很有用,这里是手册中的一条:我有一个问题。手册和您的代码明确指出,stdio必须指向父进程以外的其他地方(默认情况下),以便该进程在后台继续。但是,我发现,即使我没有指定任何stdio选项,即使在我杀死节点服务器之后,这个过程实际上也会继续。我不确定这里到底发生了什么,但也许['ignore','ignore','ignore']是一个明智的选择。不指定stdio将默认为stdio:['pipe','pipe','pipe']。。。这意味着管道可以通过ChildProcess.stdin、ChildProcess.stdout和ChildProcess.stderr使用(在这种情况下,我认为您必须从stdout和stderr读取,否则您的ChildProcess可能会挂起)。。。如果您不需要从父进程与ChildProsses的stdio交互,那么您可以使用“ignore”,它会将您的childprocess的任何输出转发到/dev/nullThank以获取更多信息。谢谢。我已经让它工作得很好了。
var child = spawn('prg', [], {
   detached: true,
   stdio: [ 'ignore', out, err ]
 });