GNU/Linux >> Belajar Linux >  >> Linux

Linux – Proses “subreaper”?

Kata "subreaper" digunakan dalam beberapa jawaban. Pencarian di Google juga menemukan entri dengan kata “baru saja digunakan”.

Bagaimana saya bisa memahami apa itu "subreaper"?

Jawaban yang Diterima:

Ini diimplementasikan ke kernel Linux 3.4 sebagai flag dari panggilan sistem prctl().

Dari prctl(2) halaman manual:

[…] Seorang subreaper memenuhi peran init(1) untuk proses
turunannya. Setelah penghentian proses yatim piatu (yaitu,
induk langsungnya telah dihentikan) dan ditandai sebagai memiliki
subreaper, subreaper nenek moyang terdekat yang masih hidup akan menerima SIGCHLD memberi sinyal dan dapat wait(2) dalam proses untuk mengetahui
status penghentiannya.

Sebuah proses dapat mendefinisikan dirinya sebagai subreaper dengan prctl(PR_SET_CHILD_SUBREAPER) . Jika demikian, ini bukan init (PID 1) yang akan menjadi parent dari proses anak yatim piatu, sebaliknya kakek nenek yang masih hidup terdekat yang ditandai sebagai subreaper akan menjadi parent baru. Jika tidak ada kakek nenek yang masih hidup, init tidak.

Alasan untuk menerapkan mekanisme ini adalah karena manajer/penyelia layanan ruang pengguna (seperti upstart , systemd ) perlu melacak layanan mereka yang dimulai. Banyak layanan melakukan daemonisasi dengan melakukan double-forking dan secara implisit di-parenting kembali ke PID 1. Manajer layanan tidak akan lagi dapat menerima SIGCHLD memberi sinyal untuk mereka, dan tidak lagi bertugas menuai anak-anak dengan wait() . Semua informasi tentang anak-anak hilang saat PID 1 membersihkan proses re-parent. Sekarang, proses manajer layanan dapat menandai dirinya sendiri sebagai semacam "sub-init", dan sekarang dapat tetap sebagai induk untuk semua proses yatim piatu 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 garpu lagi dan dengan demikian segera keluar. Cucu akan diadopsi oleh init , yang terus memanggil wait() untuk mengumpulkan status keluar anak-anaknya untuk menghindari zombie. Dengan konsep subreaper, pengelola layanan ruang pengguna kini menjadi induk baru, alih-alih init .


Linux
  1. Cara menginstal vtop di Linux

  2. Linux – Blokir Akses Jaringan Suatu Proses?

  3. Linux – Proses Init:Leluhur Semua Proses?

  1. bunuh Contoh Perintah di Linux

  2. Proses Pembuatan Linux?

  3. Membuat daemon di Linux

  1. Cara mematikan proses zombie di Linux

  2. Pengantar Utas Linux – Bagian I

  3. Bagaimana Siklus Hidup Proses Linux Bekerja – Proses Induk, Anak, dan Init