Linux'ta bir süreç ağacını nasıl öldürürsün? [kapalı]


14

Bazen, bir SIGTERM'in bir sürece gönderilmesi, SIGTERM'in tüm alt süreçlerine gönderilmesine neden olur. Ancak, bazen bu işe yaramaz.

Bir süreci ve tüm alt süreçlerini aynı anda öldürmeme izin verecek bir komut veya yardımcı program var mı? Genellikle tüm ilaçları tek bir öldürme komutuna toplamaya başvuruyorum, ama aptalca geliyor.

Bu SO sorusu perl ile nasıl yapılacağını sorar, ancak işi yapan her şey harika olurdu.


Her ne sebeple olursa olsun pkill -9, daha güçlü gibi görünüyor pkill.
Andrew

Yanıtlar:



13

İşlemlerin bir oturum tanımlayıcısını paylaştığı varsayılarak (açıkça setsid () çağrılmadıkça yapılması gerekir), bunları pkill kullanarak oturuma göre öldürebilirsiniz:

user@machine:~> ps -o pid,sess,cmd -U user
  PID  SESS CMD
12804 12804 -bash
12916 12804 ps -o pid,sess,cmd -U user
user@machine:~> sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ ps -o pid,sess,cmd -U user
  PID  SESS CMD
12804 12804 -bash
12920 12804 sh
12921 12804 sh
12922 12804 sh
12924 12804 sh
12926 12804 sh
12928 12804 sh
12937 12804 ps -o pid,sess,cmd -U user
sh-3.00$

Başka bir terminalden yapıyorsam:

pkill -9 -s 12804

Sonra her şey tek seferde ölür.

Benzer şekilde süreç grubuna göre de öldürebilirsiniz, ancak bu, ilişkili süreçler zinciri değil, bir ebeveynin bir seviye altındaki birçok çocuk için daha yararlı olma eğilimindedir.


2

Genellikle, yanıt veren bir müşteri bir sigterm almalı ve kendi kendine kapalı olmalı, böylece tüm çatallı alt süreçlerini sonlandırmalıdır. Öte yandan, müşteri yanıt vermiyorsa, normal bir sonlandırma sinyali muhtemelen yanıt vermez.

Böylece, sistemin kendisine bu Süreci Durdurmasını Şimdi Yapmasını söyleyen bir SIGKILL göndermeye devam edersiniz - bu, işlemin bazı I / O'yu beklemek gibi kesintisiz bir uyku durumunda olması dışında çoğu zaman yapabilir girdi veya benzeri.

Bu durumda, SIGKILL bile sürece hiçbir şey yapmaz; alt süreç muhtemelen benzer bir gecikme durumunda olacaktır.

Üst sürecin güzel bir şekilde sonlanabileceği bir sınır durumu vardır, ancak alt süreç fırlatılamaz. Sonra babası gittiği için temizlenemeyen bir zombi süreci ile sonuçlanacaksınız, ancak hiçbir şeye cevap vermiyor. Bunlardan kurtulmanın tek yolu yeniden başlatmadır; Ancak çoğu durumda, oldukça zararsızdırlar, çünkü yaptıkları tek şey bir PID almaktır, ancak kullanmaya çalıştıkları soket zaten solmuştur.


2

Firefox'un işlem ağacını öldürmek istiyorsam, yukarıdaki "pkill -9 -s firefox" komutuyla öldürmek mümkün mü?

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.