我正在像这样调用一个独立的 child_process
(在 Windows 中)
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
fork 一些 worker。
通常子进程和子进程应该在后台运行,如果我错了请纠正我。但是当我尝试时,子进程在前台以交互方式运行。我不知道是什么导致他们做出这样的行为。谁能指出可能是什么问题?
如果我将 detached
设置为 false
,它工作正常,但如果所有子级都退出,则原始父级无法退出。
最佳答案
我认为这可能是 node on windows 的问题。
我在 Node 文档中尝试了您的代码和示例代码,您肯定在 http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options 引用了自己在我的 Ubuntu 虚拟机上,它工作得很好。进程已分离并继续运行,除了 out.log 之外没有任何输出,因为它在后台成功运行。
我运行了一个简单的 ping 命令,还在 javascript 文件上运行了一个 Node 实例,就像您尝试做的那样,两者都运行良好。
我建议您在 Windows 中使用 ping 命令执行相同的操作。 . .
var child = child_process.spawn('ping', ['-n','25','localhost'],. . .
如果它像您预期的那样工作,则您的 main.js 中可能有某些东西导致了问题。如果它也不起作用,我会说您遇到了 Windows Node 中的错误,应该报告它。
希望对一些人有所帮助!
关于javascript - Node.js 分离的子进程被调用为交互式前台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17781943/