Kata "subreaper" digunakan dalam beberapa jawaban. Mencari di Google juga menghasilkan entri di mana kata "baru saja digunakan".
Bagaimana saya bisa mengerti apa itu "subreaper"?
process
linux-kernel
process-management
kenchew
sumber
sumber
Jawaban:
Ini diimplementasikan ke kernel Linux 3.4 sebagai flag dari panggilan sistem prctl () .
Dari halaman
prctl(2)
manual:Suatu proses dapat mendefinisikan dirinya sebagai subreaper dengan
prctl(PR_SET_CHILD_SUBREAPER)
. Jika demikian, bukaninit
(PID 1) yang akan menjadi orangtua dari proses anak yatim , melainkan kakek nenek terdekat yang ditandai sebagai subreaper akan menjadi orangtua baru. Jika tidak ada kakek / nenek yang masih hidup,init
ya.Alasan untuk menerapkan mekanisme ini adalah bahwa manajer / supervisor layanan userspace (seperti
upstart
,systemd
) perlu melacak layanan mereka yang mulai. Banyak layanan melakukan daemonisasi dengan melakukan forking ganda dan secara implisit dipasangkan kembali ke PID 1. Manajer layanan tidak lagi dapat menerimaSIGCHLD
sinyal untuk mereka, dan tidak lagi bertanggung jawab atas menuai anak-anakwait()
. Semua informasi tentang anak-anak hilang pada saat PID 1 membersihkan proses yang dipasangkan kembali. Sekarang, proses manajer layanan dapat menandai dirinya sebagai semacam "sub-init", dan sekarang dapat tetap sebagai induk untuk semua proses yatim yang dibuat oleh layanan yang dimulai. SemuaSIGCHLD
sinyal akan dikirimkan ke manajer layanan.Di Linux, daemon biasanya dibuat dengan forking dua kali dengan proses perantara keluar setelah forking cucu. Ini adalah teknik umum untuk menghindari proses zombie . Skrip init memanggil seorang anak. Anak itu bercabang lagi dan keluar dengan segera. Cucu akan diadopsi oleh
init
, yang terus-menerus memanggilwait()
untuk mengumpulkan status keluar dari anak-anaknya untuk menghindari zombie. Dengan konsep subreaper, manajer layanan userspace sekarang menjadi induk baru, bukaninit
.sumber