Node.js分离的子进程被调用为交互式前台进程

Node.js Detached child process is invoked as interactive foreground process

本文关键字:调用 交互式 前台进程 子进程 js 分离 Node      更新时间:2023-09-26

我正在调用一个分离的child_process(在窗口中),就像这个

var stdout = fs.openSync('./out.log', 'a');
var stderr = fs.openSync('./out.log', 'a');
var child = child_process.spawn('node', ['./main.js'], {
    detached: true,
    stdio: [ 'ignore', stdout, stderr ],
    env: process.env
});
child.unref();

派生的进程,即main.js,反过来又使用child_process.fork分叉一些工作者。

通常,子进程和子进程应该在后台运行,如果我错了,请纠正我。但当我尝试时,子进程在前台以交互方式运行。我不知道是什么原因导致他们这样做的。有人能指出问题出在哪里吗?

如果我将detached设置为false,它可以正常工作,但如果不退出所有子级,原始父级就无法退出。

我认为这可能是windows上节点的问题。

我在节点文档中尝试了您的代码和示例代码,您肯定在http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options在我的Ubuntu虚拟机上,它运行得很好。进程被分离并保持运行,除了out.log之外,任何地方都没有输出,因为它在后台成功运行。

我运行了一个简单的ping命令,还像您尝试的那样在javascript文件上运行了一种节点实例,两者都运行得很好。

我建议你在windows中使用ping命令也这样做。

var child = child_process.spawn('ping', ['-n','25','localhost'],. . . 

如果这能像你预期的那样工作,那么你的main.js中可能有什么东西导致了这个问题。如果它也不起作用,我会说你在windows上的节点中遇到了一个错误,应该报告它

希望这能帮助到一些人!