0

ノードでコマンドを呼び出してから、基本的にそのコマンドの標準入出力に引き渡す必要があるため、子プロセスを生成してstdioオプションを設定するとinherit、まさに求めている動作が得られます。

つまり、子プロセスが終了するまで親プロセスは実行され続けます。おそらくそれほど重要ではありませんが、親プロセスは不要になったため、親プロセスを終了することをお勧めします。

child.unref()子プロセスを生成した直後に呼び出すことでこれを実行できることがわかりましたが、これを実行すると非常に奇妙な動作が発生します。

例えば:

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

child.unref();

irb repl は実行中で、親プロセスは終了していますquitが、irb repl を入力すると、次のように表示されます。

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>'

これは例の 1 つにすぎず、ノードまたはコーヒーを irb に置き換えると同様の効果があります。実際、この問題は、ほとんどの対話型コンソールが子プロセスとして生成され、親プロセスから削除されるという点で似ているようです。

誰かがこれを経験したか、これを正しく行う方法を知っていますか?

4

1 に答える 1

0

「継承」オプションがノードプロセスをパイプに変えていると確信しているため、ioは子プロセスにルーティングされます...現在のプロセスを切断すると、そのパイプが切断されます...ノードは非常に効率的ですまた、スクリプトが複雑すぎない場合は、子プロセスを実行する前に、GC されていないオブジェクトの量を最小限に抑えることができます。私はそれが固執することについてあまり心配しません。

于 2013-02-27T22:32:55.997 に答える