ノードでコマンドを呼び出してから、基本的にそのコマンドの標準入出力に引き渡す必要があるため、子プロセスを生成して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 に置き換えると同様の効果があります。実際、この問題は、ほとんどの対話型コンソールが子プロセスとして生成され、親プロセスから削除されるという点で似ているようです。
誰かがこれを経験したか、これを正しく行う方法を知っていますか?