2016-05-23 3 views
1

私はこの質問を見つけましたが、良い答えは見つかりませんでした。Node.js fs.writeFile非同期でprocess.exit(0)が実行される

ノード0.10.40を使用しています。

子プロセスをchild_process.execFileで生成しています。このプロセスでは、fs.writeFileでファイルI/Oを実行しています。ただし、fs.writeFileコールバックまたはfilo I/Oが終了する前に、プロセスはprocess.exit(0)で終了します。

setTimeoutを除いて、どのようにプロセスが終了するのを遅らせることができるかについてのご意見はです。私はではありません私はそれを行う場合は、私も同様にfs.writeFileSyncを使用する可能性がありますので、タイムアウトを使用したいです。誰かがこの問題の解決策を見つけましたか?

このシナリオを検討しているため単純にfs.writeFileのコールバックでprocess.exit(0)を入れて[EDIT]

は、私がここを探していますものではありません。

あなたはそのスポーンプログラムを持っています子プロセス。これらの子プロセスでは、したがって、基本的writeFileのコールバック内process.exit(0)を入れても、そのあなたのみものを作品HTTPリクエストを実行し、パケットデータをダンプし、パケットデータのロジックを実行し、そのプロセスを殺す

子プロセスは、この1つのファイル入出力です。しかし、より大きなスケールでは、このプロセスでかなりの量のロジックを実際に行い、時には情報を「ダンプ」したい場合には、これは機能しません。 このプロセスの「寿命」はファイルI/Oに依存しません。これは、パケットデータに対して実行するロジックに依存します。ダンプは、このシナリオでは、振り返ってデバッグするためのものです。

+0

したがって、実際に必要なのは、非同期操作の管理に役立つものです。これは、['async'](https://github.com/caolan/async)や約束などのモジュールや他のさまざまな解決策で行うことができます。 – robertklep

答えて

3

は、あなただけは、fs.writeFileのコールバックにprocess.exit();を呼び出していることを確認する必要があります。例:

ファイルindex.js:

var child_process = require('child_process'); 

child_process.exec('node b.js', function(error, stdout, stderr){ 
    console.log(stdout); 
}); 

ファイルb.js:

var fs = require('fs'); 

var count = 0; 

function ret(aux){ 
    count++; 
    if(count==4){ 
    console.log("done i/o operation"); 
    count = 0; 
    process.exit(); 
    } 
} 
fs.writeFile('message.txt', 'writing something...', 'utf8', ret); 
fs.writeFile('message.txt', 'writing something...', 'utf8', ret); 
fs.writeFile('message.txt', 'writing something...', 'utf8', ret); 
fs.writeFile('message.txt', 'writing something...', 'utf8', ret); 

EDIT: コメントを尋ねたときに複数のI/O呼び出しを追加しました。基本的には、コールバックが何回呼び出されたかをカウントできます。whそれはあらかじめ定義された値に達します。process.exit();

+0

あなたの答えをありがとうが、複数のコールバックを持つ子プロセスで複数のfilo I/Oを実行する必要がある場合、これは役に立ちません。 – Jeremy

+0

自分のedit @Jeremyをチェックして、コールバックの呼び出し回数を数えます。 – Ernanirst

+0

この答えは間違っていないので、私はupvoteを与えた。しかし、それは大きな問題の問題を解決するものではありません。私の最近の編集を参照してください – Jeremy

関連する問題