2013-11-25 4 views
34

nodejsでchildprocessを強制終了するには?あなたはノードの<a href="http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options" rel="noreferrer"><code>child_process.spawn</code></a>で構築を使用することができる場合

!/usr/bin/env node 

require('/usr/local/lib/node_modules/shelljs/global'); 
    fs = require("fs"); 
    var child=exec("sudo mongod &",{async:true,silent:true}); 

    function on_exit(){ 
     console.log('Process Exit'); 
     child.kill("SIGINT"); 
     process.exit(0) 
    } 

    process.on('SIGINT',on_exit); 
    process.on('exit',on_exit); 

子プロセスがまだ実行されているshelljs

を使用して子プロセスを作成しました。..した後、親プロセス

+4

プロセスをフォークしてバックグラウンドに送る 'mongod&'を実行しています。 ** SIGINT **は実際の 'mongod'プロセスを強制終了しません。 – fardjad

+0

もう一つ、 'sudo mongod'を実行する代わりに、' mongod'をexecし、 'sudo'を使ってスクリプトを実行してください。必要に応じて 'mongod'(' process.setuid() 'と' process.setgid() ')を実行した後に特権を落とすことができます。 – fardjad

+0

が削除されました。それはうまくいきました。ありがとうhttp://stackoverflow.com/users/303270/fardjad –

答えて

52

を殺す、あなたはにSIGINT信号を送信することができます子プロセス:

var proc = require('child_process').spawn('mongod'); 
proc.kill('SIGINT'); 

これは、すべての子プロセスが終了するまで、メインプロセスがハングアップするということです。

+0

は十分にproc.kill()ではありませんか? proc.kill( 'SIGINT')が必要なのでしょうか? –

+0

私は 'mongod'の仕様を覚えていませんが、' proc.kill() 'を送ることは' 'proc.kill( 'SIGTERM')'( '' SIGINT' 'mongod'をシャットダウンしますか?)。私は彼らが特定のアプリケーションのために正しい信号を選ぶだろうと想像しています。 –

+6

これはどのようにして質問に答えますか?この回答は、質問の作成者がプロセスを終了させるために既に行ったことと全く同じことを示唆しています。それにもかかわらず、それは多くのupvotesを取得する? – fishbone

関連する問題

 関連する問題