まずは現象を見てみましょう
Nodejs コード:
const cp = require('child_process');
var ls = cp.spawn('ls', ['/']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process closed with code ${code}`);
});
while(true){}
このnodejsコードを実行すると、何も表示されず、イベントがトリガーされていないようです。
次に、別のシェルで「ps -ef | grep ls | grpe -v grep」を実行すると、結果は次のようになります。
liyuanq+ 10995 10990 0 11:06 pts/3 00:00:00 [ls] <defunct>
コードを削除する場合:
while(true){}
ノードプロセスが終了し、on data イベントをトリガーしました。
問題は、ノードが実際にジョブを終了したときに、親ノードのプロセスが終了するまで生成されたプロセスを閉じない理由です。
私の環境:
OS: Debian 8.4 x86_64
ノード: v6.1.0