2013-02-27 45 views
0

我不得不在节点中调用一个命令,然后基本上移交给该命令的stdio,因此当产生子进程并将stdio选项设置为inherit时,之后。节点产生的子节点和反馈问题

这就是说,父进程保持运行,直到退出子进程,虽然它可能并不重要,但我真的希望退出父进程,因为它不再需要。

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

如:

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

child.unref(); 

内部评级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

我敢肯定,“inherit”选项会将节点进程转换为管道,以便将io路由到子进程...如果您切断当前进程,那么将切断管道...节点在管道流量方面非常高效,如果脚本不太复杂,则可以在运行子进程之前尽量减少非GC对象的数量。我不会太担心让它坚持下去。