重複の可能性:
node.js はシステム コマンドを同期的に実行します
別の node.js ファイルから node.js ファイルを同期的に実行したいと考えています。これは私が持っているものですが、非同期です。
var spawn = spawn('node', ['./file.js']);
spawn.stdout.on('data',function(data){});
重複の可能性:
node.js はシステム コマンドを同期的に実行します
別の node.js ファイルから node.js ファイルを同期的に実行したいと考えています。これは私が持っているものですが、非同期です。
var spawn = spawn('node', ['./file.js']);
spawn.stdout.on('data',function(data){});
質問の下のあなたのコメントから、あなたはそれを同期させたくないように思えます、そしてあなたはその出力を気にしないようです。
他のプロセスを起動して、それを監視したり、いつ終了するかを気にせずに忘れたい場合は、すでに使用しているもの(spawn
)がそれを実行します。
本当にファイアアンドフォーゲットしたい場合は、プロセスが終了したときに子プロセスが強制終了されないように、オプションを指定する必要がありますdetached
。ドキュメントから:
オプションが設定されている場合
detached
、子プロセスは新しいプロセスグループのリーダーになります。これにより、親が終了した後も子が実行を継続できるようになります。
さらに下を見ると、明らかにあなたもunref
それにしなければなりません:
デフォルトでは、親は切り離された子が終了するのを待ちます。親が特定の子を待機しないようにするには、
child.unref()
メソッドを使用します。親のイベントループでは、参照カウントに子が含まれません。
そしてどうやら対処するstdio
:
detached
長時間実行プロセスを開始するオプションを使用する場合stdio
、親に接続されていない構成が提供されていない限り、プロセスはバックグラウンドで実行されたままになりません。親のstdioが継承されている場合、子は制御端末に接続されたままになります。
それで:
spawn('node', ['./file.js'], {
detached: true,
stdio: [ 'ignore', 'ignore', 'ignore' ]
}).unref();