节点子进程无法分离运行

时间:2016-02-08 04:27:10

标签: node.js process fork detach

我正在尝试使用

分叉节点子进程
child_process.fork("child.js")

在父母退出后让它说活着。我尝试过像这样使用分离选项:

child_process.fork("child.js", [], {detached:true});

使用spawn时有效,但使用fork时分离是真的,它只是静默失败,甚至没有执行child.js。

我也试过

var p = child_process.fork("child.js")
p.disconnect(); 
p.unref();

但是,当父母做的时候,孩子仍然会死。 任何帮助或见解将不胜感激。

编辑:

节点版本:v5.3.0 平台:Windows 8.1 代码:

//Parent
var child_process = require("child_process");

var p;
try{
  console.log(1)
  p = child_process.fork("./child.js")
  console.log(2)
} catch(e){
  console.log(e)
}
p.on('error', console.log.bind(console))

p.disconnect();
p.unref();

//To keep process alive
setTimeout(() => {
  console.log(1);
}, 100000);

-

//Child
var fs = require("fs");

console.log(3);

fs.writeFileSync("test.txt", new Date().toString());

setTimeout(()=>{
  console.log(1);
}, 100000);

1 个答案:

答案 0 :(得分:0)

我假设您正在从命令行执行父文件,这可能就是它出现的原因"分叉的孩子没有执行。实际上,当父进程退出时,终端停止等待,从而打印一个新行,等待下一个命令。这使得孩子似乎没有执行,但相信我。也没有"分离" child_process.fork的选项

向子进程添加一些console.log()语句,即使在父进程退出后,您也应该在终端中看到输入打印。如果您不是因为您的孩子由于错误而过早退出。在从父进程调用之前,直接运行子进程以对其进行调试。

看看这个简单的例子:

enter image description here

希望这有帮助。