Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 父进程终止时,Nodejs分离的子进程终止_Javascript_Node.js_Linux - Fatal编程技术网

Javascript 父进程终止时,Nodejs分离的子进程终止

Javascript 父进程终止时,Nodejs分离的子进程终止,javascript,node.js,linux,Javascript,Node.js,Linux,我在linux上,我使用一个节点进程生成一个运行bash脚本的子进程。bash脚本执行dist升级。执行dist升级会杀死节点,这会杀死父进程,也会杀死升级本身 根据nodejs文档,如果父进程退出,子进程可以继续运行,前提是子进程已使用detached标志生成 如果我运行此代码: const child_process = require("child_process"); child_process.spawn('xterm', [], { detached: true, s

我在linux上,我使用一个节点进程生成一个运行bash脚本的子进程。bash脚本执行dist升级。执行dist升级会杀死节点,这会杀死父进程,也会杀死升级本身

根据nodejs文档,如果父进程退出,子进程可以继续运行,前提是子进程已使用
detached
标志生成

如果我运行此代码:

const child_process = require("child_process");
child_process.spawn('xterm', [], {
    detached: true,
    stdio: ['ignore','ignore','ignore']
}).unref();

当我在webstorm中终止父进程时,子进程(xterm窗口)也会退出。。。当我使用
kill-9/15/..
杀死父进程时,子进程将保持运行。因此,如果分离,似乎有些方法仍然可以杀死子进程。但我不知道确切的时间、原因以及如何避免它?

在测试您提供的代码段时,我可以打开一个Firefox窗口(在OSX上),并在进程退出后保持它运行(在生成的进程上调用
unref()
时立即退出)。如果我不调用
unref()
,节点将保持等待状态,但当我杀死它时,Firefox将保持打开状态。如果我没有提供
分离
标志,那么当我终止进程时,Firefox也会退出。因此,我认为在您提供的代码之外有一些东西使它不能按预期工作,因为这段代码在我这方面工作得很好。。。这里更广泛的上下文是什么?@SamuelBolduc是的,我做了一些进一步的实验,如果我使用
kill-9/2/1/15 pid
killall nodejs
杀死父进程,子进程确实会继续运行。然而,我首先从webstorm运行它,当我停止在webstorm中运行进程时,子进程仍然退出。因此,我猜取决于您终止进程的方式,子进程将保持活动状态或退出,但我不知道确切的时间。我在OP中添加了更多信息。我在WebStorm中遇到了同样的行为。停止调试会话将终止分离的子进程。但它很少不杀死子进程@SebaKerckhof,你在这方面有什么进展吗?问题仍然存在于节点10.15.0 WebStorm 2018.3。