Aşağıdaki süreçler var.
ParentProcess - Çocuk Süreci - Çocuk Süreci - Çocuk Süreci
Yalnızca ana süreci nasıl öldürebilirim? Çocuk süreçlerinin öldürülmemesini istiyorum. Ebeveyn sürecini öldürmeye çalışırsam, çocuklar SIGHUP alacak ve öldürülecek.
Aşağıdaki süreçler var.
ParentProcess - Çocuk Süreci - Çocuk Süreci - Çocuk Süreci
Yalnızca ana süreci nasıl öldürebilirim? Çocuk süreçlerinin öldürülmemesini istiyorum. Ebeveyn sürecini öldürmeye çalışırsam, çocuklar SIGHUP alacak ve öldürülecek.
Yanıtlar:
Genel olarak konuşursak, bir süreç yetim olduğunda (yani, ebeveyni ölür) init tarafından benimsenir.
Açıkladığınız özel durum, kontrol terminali kapandığında muhtemelen etkileşimli bir süreç için geçerlidir ( Wikipedia'dan ):
SIGHUP sinyali kontrol terminali kapalı olduğunda bir işleme gönderilir. Başlangıçta bir seri hat düşüş sürecini bildirmek için tasarlanmıştır. Modern sistemlerde, bu sinyal genellikle sözde veya sanal terminalin kontrolünün kapatıldığı anlamına gelir.
Bunu önlemek için alt süreçler SIGHUP'u engellemelidir, bu nedenle çoğu durumda üst süreçten işbirliğine ihtiyacınız vardır.
Üst süreç bir kabuk (ise bash
, csh
ve benzeri) ve size bash bitince, herhangi komut öneki zaman sonlandırmak için değil koşmak komutları istiyorum nohup
(dan info coreutils "nohup invocation"
):
'nohup', verilen KOMUT'u, takma sinyalleri yoksayılmış olarak çalıştırır, böylece komut oturumu kapattıktan sonra arka planda çalışmaya devam edebilir.
Bu örnekte:
$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
find
kabuk kontrol terminalini sonlandırıp kapattığında öldürülmez /dev/ttys000
.
Bir kabuk SIGHUP engellemek olursa, yerleşiğini kullanmak trap
açıklandığı gibi, burada için bash
.