Yalnızca bir üst süreci nasıl öldürebilirim?


10

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.


5
Bir alt sürecin tanımı, ebeveynine bağlı mı?
Brad Patton

umh, muhtemelen evet. Ebeveynine bağlı.
kcm1700

Yanıtlar:


8

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, cshve 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 {} \;

findkabuk kontrol terminalini sonlandırıp kapattığında öldürülmez /dev/ttys000.

Bir kabuk SIGHUP engellemek olursa, yerleşiğini kullanmak trapaçıklandığı gibi, burada için bash.


1
Daha önce nohup olmadan süreci açtım, herhangi bir öneriniz var mı?
kcm1700

Bildiğim kadarıyla çok şey yapamazsın. İşlemler çalıştıktan sonra, sinyallere tepki verme şeklini değiştiremezsiniz.
jaume

1
Halihazırda çalışan bir işlemi nohup altına nasıl koyabilirim? stackoverflow.com/questions/625409/…
PeterVermont
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.