“Alt hazırlık” süreci nedir?


38

Bazı cevaplarda "subreaper" kelimesi kullanılır. Google’da arama yapmak, aynı zamanda "sadece kullanılan" kelimelerini içeren girişleri de açar.

"Subreaper" ın ne olduğunu nasıl anlayabilirim?


3
Sözcüğü daha önce hiç duymamıştım. Bağlam için bazı referanslar ekleyebilir misiniz?
Celada

5
İşte bir tane: unix.stackexchange.com/a/177361/5132 adresinde bir cevapta kullandım .
JdeBP

Belki de ServerFault de yerine burada yayınlanan olması gerektiğini İlgili soru serverfault.com/questions/747070/...
artfulrobot

Yanıtlar:


49

Bu, Linux çekirdeği 3.4'e prctl () çağrısı sistemi bayrağı olarak uygulanmıştır .

Gönderen prctl(2)man:

[...] Bir alt okuyucu init(1), soyundan gelen süreçlerin rolünü yerine getirir . Ölen (yani ana ebeveyni çoktan sona ermiş) bir işlemin sona ermesi üzerine ve bir alt okuyucunun işaretlenmiş olması durumunda, en yakın hala yaşayan ata alt okuyucusu bir SIGCHLDişaret alacaktır ve wait(2)bu işlemin sona erme durumunu keşfetmesi için bir sinyal alabilecektir .

Bir süreç kendisini bir alt okuyucu olarak tanımlayabilir prctl(PR_SET_CHILD_SUBREAPER). Öyleyse init, öksüz çocuk süreçlerinin ebeveyni olmayacak (PID 1) değil , bunun yerine bir alt okur olarak işaretlenmiş en yakın yaşayan büyükbaba veya büyükanne yeni ebeveyn olacaktır. Eğer yaşayan bir büyükbaba veya büyükbaba inityoksa , yapar.

Bu mekanizmayı uygulamak için bir neden olduğunu userspace servis yöneticileri / denetçiler (gibiydi upstart, systemdonların başladı hizmetlerini izlemek için) gerekir. Pek çok hizmet çift çatallama yoluyla daemonize edilir ve PID 1 ile dolaylı olarak yeniden eşleştirilir . Servis yöneticisi artık SIGCHLDonlar için sinyalleri alamayacak ve artık çocuklara ulaşmaktan sorumlu olmayacaktır wait(). Çocuklarla ilgili tüm bilgiler şu anda kaybedilir; PID 1, yeniden ebeveyn işlemlerini temizler. Şimdi, bir servis yöneticisi süreci kendisini bir çeşit "alt giriş" olarak işaretleyebilir ve şimdi başlatılan hizmetler tarafından oluşturulan tüm artık işlemler için ana olarak kalabilir. Tüm SIGCHLDsinyaller servis yöneticisine iletilecektir.

Linux'ta, bir torun tipik olarak torun ayrılmasının ardından ara işlem çıkarken iki kez çatallarak oluşturulur . Bu, zombi işlemlerinden kaçınmak için yaygın bir tekniktir . Init betiği çocuk çağırıyor. Bu çocuk tekrar çatallanır ve böylece hemen çıkar. Torun, zombilerden kaçınmak için initsürekli olarak wait()çocuklarının çıkış statüsünü toplamaya çağıran evlat edinecek . Alt okuyucular konseptiyle, kullanıcı alanı servis yöneticisi artık bunun yerine yeni ebeveyn olur init.


Öyleyse, sürecin "alt" işlemi "biçtiğini" düşünebilir miyim? Veya, "ana" orakçı init olduğu için süreç bir "alt" orakçıdır? Terimin nasıl icat edildiğini düşünmeye çalışıyorum. Cevap için teşekkürler!
kenchew

3
Yukarıdaki Linux çekirdeği 3.4 bağlantısını takiben, bu uygulama için verilen yorum daha ayrıntılı bilgi içermektedir. (Git yorumunda gizli ayrıntıları ile
uyandı
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.