Çocuğumun PGID'si neden ebeveynin PID'sini işlemiyor?


13

Bu nedenle, bu komutun üst sürecin tüm alt süreçlerini sonlandırması gereken her yerde okumaya devam ediyorum:

kill -- -$$

Kill komutuyla negatif bir kimlik kullanmak bir PGID'ye başvurur ve gördüğüm örneklerden, alt işlemlerin PGID'sinin ebeveynin PID'si olması gerekir, ancak sistemimde durum böyle değildir.

Sistemimde, çocuğun PGID'si, bash olduğu ortaya çıkan üst komut dosyasının PGID'si ile aynıdır.

Burada neler oluyor? Örnekler yanlış mıydı yoksa sistemim farklı mı kuruldu?

Ulaşmam gereken şey, ebeveynleri sonlandırmadan alt süreçleri sonlandırmak, böylece ebeveynin içinde bulunduğu PGID'ye bir öldürme sinyali göndermek istemiyorum.

Yanıtlar:


11

Sanırım Process Group ID anlamına gelen PGID'yi kastediyorsunuz .

Bir işlem çatallandığında, PGID'sini üst öğesinden devralır. Bir süreç bir süreç grubu lideri olduğunda PGID değişir , sonra PGID'si PID'sinden kopyalanır. O andan itibaren, yeni çocuk doğurur ve onların torunları, bu PGID'yi devralırlar (kendi yeni süreç gruplarına başlamadıkça).

Çoğu etkileşimli kabuk gibi iş kontrollü bir kabukta, her iş kendi işlem grubuna konur. Bir kabuk komut dosyası çalıştırırsanız, komut dosyasını çalıştıran kabuk işlemi grup lideri olur ve PGID, PID'sine eşit olur.

Komut dosyalarını çalıştırmak için kullanılan çoğu kabuk gibi iş denetimi olmayan bir kabukta, komutlar kabuğun işlem grubunda çalıştırılır.

Sözdizimi kill -- -N, gruptaki tüm işlemleri PGID = N ile öldürür. Bu, PGID olduğu için rastgele bir PID ile, yalnızca bir işlem grubu liderinin PID'siyle kullanılamaz. Bu aslında kabuğun

kill %jobid

sözdizimi çalışır - %jobidişin PGID'sine dahili olarak çevirir ve sinyali bu PGID'ye gönderir.

Bir komut dosyasını kendi işlem grubunda başka bir kabuk komut dosyasından çalıştırmanın basit bir yolu yoktur. Bkz Nasıl bir kabuk set süreç grubuna olsa bazı öneriler için.


İş kontrolü olan veya olmayan bir kabuğun aynı şeyi yaptığını mı söylüyorsunuz?
TCZ8

1
Hayır. İş denetimine sahip bir kabuk, her iş için yeni bir işlem grubu başlatır. İş denetimi olmayan bir kabuk, her iş için yeni bir işlem grubu başlatmaz, bunları kendi işlem grubunda çalıştırır.
Barmar

vay .. Bunu ilk seferde doğru okumadım. Öyleyse istediğim iş kontrolünü açmak mı? Çocuğun, üst komut dosyasının PID'siyle eşleşen bir PGID'si olmasını sağlar mı? Yoksa her çocuk kendi benzersiz PGID'sini alacak mı?
TCZ8

İş belgelerinde çevrimiçi olarak bazı dokümanlar buldum, bunun üzerinden geçeceğim. Yardımınız için teşekkürler Barmar.
TCZ8

1
İş kontrolü ile her çocuk kendi PGID'sini alır. İş kontrolü olmadan, ebeveynin PGID'sini devralırlar. Ama ebeveyn onun pgid miras olabilir onun bir süreç grup lideri değilse, ebeveyn.
Barmar
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.