2017-04-13 31 views
2

ノード6.9を使用して子プロセスを生成しています。Node.js子プロセスがSIGTERMで終了する

const child = require('child_process').execFile('command', args); 
child.stdout.on('data', (data) => { 
    console.log('child:', data); 
}); 
child.stderr.on('data', (data) => { 
    console.log('child:', data); 
}); 
child.on('close', (code, signal) => { 
    console.log(`ERROR: child terminated. Exit code: ${code}, signal: ${signal}`); 
}); 

私の子プロセスが〜1メートルの30代のために動作しますが、その後、私は私のNode.jsのプログラムからこの出力を得る:

ERROR: child terminated. Exit code: null, signal: SIGTERM 

私の子プロセスを終了し、その理由は何?

編集: 私はオプションとしてkillSignal: 'SIGILL'を追加しました。今

var child = require('child_process').execFile('geth', args, { killSignal: 'SIGILL'}); 

、私はこれを取得:

ERROR: go-ethereum terminated. Exit code: 2, signal: null 
+0

「スタンドアロン」とは、コンテナ内を意味しますが、ノードによって生成されたものではなく、コンテナの外側にありますが、ノードによって生成されますか? – Ryan

+0

こんにちはRyan、申し訳ありません、私はもっと明確にしました。コンテナの中でノード – mitchkman

+1

によって生成されなかった 'args'は' timeout'プロパティを持っているとは思いませんか?あなたが 'Object.assign({}、args、{killSignal: 'SIGILL'})'を渡すと、シグナルは変化しますか? – Ryan

答えて

3

私は、問題と解決策を見つけました。

maxBuffer largest amount of data (in bytes) allowed on stdout or stderr - if exceeded child process is killed (Default: 200*1024)

https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_child_process_execfile_file_args_options_callbackから私はmaxBufferオプション高く設定することができます。

childProcess.execFile('geth', args, { maxBuffer: 400 * 1024}); 

は、あなたがいなくても0にそれを設定することにより、maxBufferオプションを無効にすることはできませんようです。しかし、目的であると思われます。

+0

サブプロセスとして「進捗通知」のプログラムを実行したときも同じことが起こったと思います。しばらくの間実行した後、ノードは消滅しました。バッファサイズの大きさを推定するのは難しいようです。非常に多くの情報を記録するプログラムを実行しないようにするのが、良い一般的な解決策だと私には思われます。 – Jackson

関連する問題