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"?
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"?
Jawaban:
Ini diimplementasikan ke kernel Linux 3.4 sebagai flag dari panggilan sistem prctl () .
Dari halaman prctl(2)
manual:
[...] Subreaper memenuhi peran
init(1)
untuk proses turunannya. Setelah penghentian suatu proses yang menjadi yatim (yaitu, orang tua terdekatnya telah berakhir) dan ditandai sebagai memiliki subreaper, subreaper leluhur terdekat yang masih hidup akan menerimaSIGCHLD
sinyal dan dapatwait(2)
pada proses untuk menemukan status penghentiannya.
Suatu proses dapat mendefinisikan dirinya sebagai subreaper dengan prctl(PR_SET_CHILD_SUBREAPER)
. Jika demikian, bukan init
(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 menerima SIGCHLD
sinyal untuk mereka, dan tidak lagi bertanggung jawab atas menuai anak-anak wait()
. 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. Semua SIGCHLD
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 memanggil wait()
untuk mengumpulkan status keluar dari anak-anaknya untuk menghindari zombie. Dengan konsep subreaper, manajer layanan userspace sekarang menjadi induk baru, bukan init
.