Pertama, "leluhur" tidak sama dengan "orangtua". Nenek moyang dapat menjadi ... induk orangtua, orangtua, dan kernel hanya melacak satu level. Namun, ketika suatu proses mati, anak-anaknya diadopsi oleh init, sehingga Anda akan melihat banyak proses yang orang tuanya 1 pada sistem yang khas.
Sistem Linux modern juga memiliki beberapa proses yang mengeksekusi kode kernel, tetapi dikelola sebagai proses pengguna, sejauh menyangkut penjadwalan. (Mereka tidak mematuhi aturan manajemen memori yang biasa karena mereka menjalankan kode kernel.) Semua proses ini dihasilkan oleh kthreadd
(itu adalah init dari utas-utas kernel). Anda dapat mengenalinya dengan ID proses induknya (2) atau, biasanya, dengan fakta bahwa ps
daftar mereka dengan nama antara tanda kurung siku atau dengan fakta bahwa /proc/2/exe
(biasanya tautan simbolis ke proses yang dapat dieksekusi) tidak dapat dibaca.
Proses 1 ( init
) dan 2 ( kthreadd
) dibuat langsung oleh kernel pada saat boot, sehingga mereka tidak memiliki orangtua. Nilai 0 digunakan di bidang ppid mereka untuk menunjukkan itu. Anggap 0 berarti “kernel itu sendiri” di sini.
Linux juga memiliki beberapa fasilitas untuk kernel untuk memulai proses pengguna yang lokasinya ditunjukkan melalui parameter sysctl dalam keadaan tertentu. Sebagai contoh, kernel dapat memicu peristiwa pemuatan modul (misalnya ketika perangkat keras baru ditemukan, atau ketika beberapa protokol jaringan pertama kali digunakan) dengan memanggil program dalam nilai kernel.modprobe
sysctl. Ketika sebuah program membuang inti, kernel memanggil program yang ditunjukkan oleh kernel.core_pattern
jika ada.
init
apakah "leluhur" dari semuauser threads
, sedangkan[kthreadd ]
"orangtua" dari semuakernel threads
, kan? Terima kasih!