Javascript 父进程终止时,Nodejs分离的子进程终止
我在linux上,我使用一个节点进程生成一个运行bash脚本的子进程。bash脚本执行dist升级。执行dist升级会杀死节点,这会杀死父进程,也会杀死升级本身 根据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
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。