node.js işlem çıkışındayken tüm alt süreçleri (child_process.spawn kullanılarak oluşturulan) nasıl öldürebilirim?Tüm alt süreçler çıkışta nasıl öldürülür?
cevap
Tek yol, spawn
tarafından döndürülen ChildProcess
nesnesine bir başvuru tutmak ve ana işlemden çıktığınızda onu öldürmek olduğunu düşünüyorum.
Bir küçük örnek:
var spawn = require('child_process').spawn;
var children = [];
process.on('exit', function() {
console.log('killing', children.length, 'child processes');
children.forEach(function(child) {
child.kill();
});
});
children.push(spawn('/bin/sleep', [ '10' ]));
children.push(spawn('/bin/sleep', [ '10' ]));
children.push(spawn('/bin/sleep', [ '10' ]));
setTimeout(function() { process.exit(0) }, 3000);
my mac, spawn tarafından başlatılan tüm alt işlemler ana düğüm işlemi sırasında öldürülür bitirir. Belki bu OS özgüdür? – AndyD
Mac'imde (10.8.3) devam ediyorlar: Yukarıdaki kodu kullanarak, child.kill() işlevini açıkladığımda, kısaca (10 saniye geçene kadar) çıkışta üç 'uyku 'sürecini görüyorum. master işlemi durduktan sonra ps '(bu işlemler kabuk kontrolör terminaline bağlı olsa da, kabuğu öldürdüğümde, giderler). – robertklep
İlginç. Çocuk sürecim bir phantomjs sürecidir. Belki de farklı davranır. Yukarıdaki kodu, değiştirirse kullanacağım. (10.8.0) – AndyD
@ robertklep cevabı eklemek için: Düğüm dışarıdan öldürülüyor zaman benim gibi, daha ziyade kendi seçtikleri daha bunu yapmak istiyorum, Eğer
Sinyaller ile biraz hile yapmak zorundasın.
anahtar Düğüm process
üzerinde exit
vermeyecektir varsayılan olarak aksi takdirde öldürülmüş olabilir ne olursa olsun sinyal (ler) için dinlemek ve process.exit()
çağrı etmektir!
var cleanExit = function() { process.exit() };
process.on('SIGINT', cleanExit); // catch ctrl-c
process.on('SIGTERM', cleanExit); // catch kill
Bunu yaptıktan sonra, sadece normal process
üzerinde exit
dinleyebilirsiniz.
Tek sorun SIGKILL
yakalanamıyor, ancak bu tasarım gereğidir. Yine de,SIGTERM
(varsayılan) ile olmalıdır. Daha fazla bilgi için bkz. this question Bkz.
- 1. Süreçler ada göre nasıl öldürülür? (Win32 API)
- 2. Node.JS alt süreçler öldüğünde öldürülürken çocuk süreçleri
- 3. Alt süreçler meta verilere dokunduğunda bellek patlamasını nasıl engelleyebilirim?
- 4. Deneme/çıkışta programdan nasıl çıkabilirim?
- 5. gulp düzensiz şekilde öldürülür
- 6. Python çok işlemcili modülüyle oluşturulan alt süreçler yazdırılamayacak
- 7. PyQt uygulamasında çıkışta sor
- 8. UIDocumentInteractionController çıkışta çöküyor
- 9. PM2, ek süreçler çalıştırıyor
- 10. Tutulma, nasıl düzgün bir şekilde öldürülür?
- 11. Çok uzun sürerse bir program nasıl öldürülür?
- 12. node.js'de açık bir işlem nasıl öldürülür?
- 13. Bir sınıfı süreçler arasında nasıl paylaşabilirim?
- 14. Birbirini takip eden süreçler
- 15. Çıkışta javascript olmadan RMarkdown'dan HTML nasıl oluşturulur
- 16. RxJS gözlemlenebilir sekansı çoklu çıkışta
- 17. Python tkinter - tüm alt öğeleri nasıl silebilirim?
- 18. HVect'in tüm alt boyutları nasıl belirlenir?
- 19. Bir klasörün tüm alt klasörlerini nasıl bulurum?
- 20. Tüm alt iş süreçlerini nasıl sonlandırırım?
- 21. Stokastik süreçler için birim testi?
- 22. Kalıcı Süreçler Mesaj Python Havuzu
- 23. Koleksiyondaki tüm alt belgeleri al
- 24. Süreçler oluşturulduğunda bir Sistem olayı var mı?
- 25. Sphinx (belge aracı): çıkışta sekme genişliğini ayarlama
- 26. Girilen giriş veya çıkışta giriş değerini girin
- 27. Tüm alt öğelerin genişliğini belirle
- 28. Visual Studio'da prebuild adımında bulunmayan süreç nasıl öldürülür?
- 29. Zombi Süreçler Ben Yumurtlama İşlemleri Yaparken Görünüyor
- 30. PyQt: Çıkış yok Hata msg (traceback) çıkışta
[Buna bakın] (http://stackoverflow.com/questions/5266152/how-to-exit-in-node-js) – karthick