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?
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?
Yanıtlar:
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 birSIGCHLD
işaret alacaktır vewait(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 init
yoksa , yapar.
Bu mekanizmayı uygulamak için bir neden olduğunu userspace servis yöneticileri / denetçiler (gibiydi upstart
, systemd
onları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 SIGCHLD
onlar 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 SIGCHLD
sinyaller 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 init
sü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
.