Apa itu proses "subreaper"?


39

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"?


3
Saya tidak pernah mendengar kata itu sebelumnya. Bisakah Anda memasukkan beberapa referensi untuk konteks?
Celada

5
Ini satu: Saya menggunakannya dalam sebuah jawaban di unix.stackexchange.com/a/177361/5132 .
JdeBP

Pertanyaan terkait yang mungkin harus saya posting di sini alih-alih di serverfault serverfault.com/questions/747070/…
artfulrobot

Jawaban:


50

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 menerima SIGCHLDsinyal dan dapat wait(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, initya.

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 SIGCHLDsinyal 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 SIGCHLDsinyal 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.


Jadi, dapatkah saya berpikir bahwa proses "menuai" proses "sub"? Atau, prosesnya adalah reaper "sub" karena reaper "utama" adalah init? Hanya mencoba memikirkan bagaimana istilah itu diciptakan. Terima kasih atas jawabannya!
kenchew

3
Mengikuti tautan Linux kernel 3.4 di atas, komentar komit untuk implementasi ini memiliki perincian lebih lanjut. (Kagum dengan detail yang tersembunyi di komentar git)
kenchew
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.