0

重複の可能性:
node.js はシステム コマンドを同期的に実行します

別の node.js ファイルから node.js ファイルを同期的に実行したいと考えています。これは私が持っているものですが、非同期です。

    var spawn = spawn('node', ['./file.js']);
    spawn.stdout.on('data',function(data){});
4

1 に答える 1

2

質問の下のあなたのコメントから、あなたはそれを同期させたくないように思えます、そしてあなたはその出力を気にしないようです。

他のプロセスを起動して、それを監視したり、いつ終了するかを気にせずに忘れたい場合は、すでに使用しているもの(spawn)がそれを実行します。

本当にファイアアンドフォーゲットしたい場合は、プロセスが終了したときに子プロセスが強制終了されないように、オプションを指定する必要がありますdetached。ドキュメントから:

オプションが設定されている場合detached、子プロセスは新しいプロセスグループのリーダーになります。これにより、親が終了した後も子が実行を継続できるようになります。

さらに下を見ると、明らかにあなたもunrefそれにしなければなりません:

デフォルトでは、親は切り離された子が終了するのを待ちます。親が特定の子を待機しないようにするには、child.unref()メソッドを使用します。親のイベントループでは、参照カウントに子が含まれません。

そしてどうやら対処するstdio

detached長時間実行プロセスを開始するオプションを使用する場合stdio、親に接続されていない構成が提供されていない限り、プロセスはバックグラウンドで実行されたままになりません。親のstdioが継承されている場合、子は制御端末に接続されたままになります。

それで:

spawn('node', ['./file.js'], {
    detached: true,
    stdio: [ 'ignore', 'ignore', 'ignore' ]
}).unref();
于 2012-12-06T16:30:30.973 に答える