1

我正在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.

通常子进程和子进程应该在后台运行,如果我错了,请纠正我。但是当我尝试时,子子进程在前台以交互方式运行。我不知道是什么导致他们表现得这样。谁能指出可能是什么问题?

如果我设置detachedfalse,它可以正常工作,但是如果没有所有子级退出,原始父级就无法退出。

4

1 回答 1

2

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

我尝试了您的代码和节点文档上的示例代码,您肯定会在我的 Ubuntu 虚拟机上的http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options上引用自己,它工作得很好。进程已分离并继续运行,除了 out.log 之外没有任何输出,因为它在后台成功运行。

我既运行了一个简单的 ping 命令,又运行了一个 javascript 文件上的节点实例,就像您尝试做的那样,两者都工作得很好。

我建议您在 Windows 中使用 ping 命令执行相同的操作。. .

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

如果它像您期望的那样工作,那么您的 main.js 中可能存在导致问题的东西。如果它也不起作用,我会说你遇到了 Windows 节点中的错误,应该报告它。

希望能有所帮助!

于 2013-07-22T12:45:53.907 回答