【问题标题】:Node spawn child and unref issue节点生成子和 unref 问题
【发布时间】:2013-02-27 22:11:06
【问题描述】:

我必须在 Node 中调用一个命令,然后基本上移交给该命令的标准输入输出,因此当生成一个子进程并将stdio 选项设置为inherit 时,我得到的正是我所追求的行为.

也就是说,父进程一直在运行,直到子进程退出,虽然这可能并不重要,但我真的更喜欢退出父进程,因为它不再需要了。

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

例如:

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 替换为 node 或 coffee 具有类似的效果。事实上,这个问题似乎与大多数交互式控制台作为子进程生成然后从父进程中删除类似。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多