2013-11-25 2 views
34

nodejs'de çocuk süreçlerini nasıl öldürebilirim? Düğüm en <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> inşa kullanabilirsek

!/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); 

Çocuk işlemin çalışmaya devam shelljs

kullanarak childprocess düzenlendi .. sonra üst işlemin

+4

İşlemi zorlayan ve arka plana gönderen mongod & 'çalışıyorsunuz. Gönderme ** SIGINT ** gerçek 'mongod' sürecini öldürmez. – fardjad

+0

Bir şey daha, 'sudo mongod' yürütmek yerine, mongod' exec ve' sudo' ile komut dosyasını çalıştırın. İsterseniz, “mongod” ('process.setuid()' ve 'process.setgid()' ile) çalıştırdıktan sonra ayrıcalıkları bırakabilirsiniz. – fardjad

+0

'&' kaldırıldı ve işe yaradı ... teşekkürler http://stackoverflow.com/users/303270/fardjad –

cevap

52

öldürmek için önce bir SIGINT sinyal göndermek mümkün olacaktır alt süreç:

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

Bunun tersine, ana işlemin tüm alt işlemlerin sona erdirilinceye kadar beklemesi gerekir.

+0

proc.kill() yeterli değil mi? ya da proc.kill'e ('SIGINT') ihtiyacımız var mı? –

+0

'mongod'un özelliklerini hatırlamıyorum, ancak' proc.kill() 'gönderme 'şu anda' proc.kill ('SIGTERM')' göndermeye eşdeğerdir. '' mongod'ı kapatın? Birinin kendi özel uygulaması için doğru sinyali alacağını hayal ediyorum. –

+6

Bu soruya nasıl cevap veriyor? Bu cevap, sorunun yazarının süreci öldürmek için zaten yaptığı şeyi tam olarak aynen göstermektedir. Yine de birçok upvotes alır? – fishbone

İlgili konular