节点生成child和unref问题

时间:2013-02-27 22:11:07

标签: javascript node.js process terminal command-line-interface

我必须在Node中调用一个命令然后基本上移交给该命令的stdio,所以当生成子进程并将stdio选项设置为inherit时,我得到的确是我在追求。

那说父进程一直在运行,直到子进程退出,虽然它可能无关紧要,但我真的更愿意退出父进程,因为不再需要它。

我已经发现我可以通过在生成子进程后立即调用child.unref()来做到这一点,但是在执行此操作时我会遇到一些非常奇怪的行为。

E.g:

var child = child_process.spawn('irb', [], {
    detached: true,
    stdio: 'inherit'
  });

child.unref();

irb repl正在运行并且父进程已退出,但是当在irb repl中键入quit时,我得到了这个:

qNameError: undefined local variable or method `uit' for main:Object
    from (irb):1
    from /Users/RayViljoen/.rvm/rubies/ruby-1.9.3-p385/bin/irb:16:in `<main>'

这只是其中一个例子,用irb代替节点或咖啡具有类似的效果。实际上,这个问题似乎与大多数交互式控制台类似,这些控制台作为子进程生成,然后从父进程中删除。

有没有人经历过这种情况或知道如何正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

我很确定“继承”选项是将您的节点进程转换为管道,以便将io路由到子进程...如果您切断当前进程,该管道将被切断...节点在管道流量方面非常有效,如果您的脚本不是太复杂,您可以在运行子进程之前最小化非GC对象的数量。我不会太担心让它留下来。