Zombie tidak benar-benar terkait dengan yang lain; itu hanyalah sebuah proses yang telah dihentikan, tetapi proses induknya belum membaca status keluarnya waitpid()
atau sejenisnya. Anda seharusnya tidak melihat ini kecuali prosesnya bermasalah atau berhenti.
Sebuah daemon merupakan program yang berjalan tanpa terminal pengendali. Biasanya ketika Anda menjalankan program, itu fork()s
sendiri, dan orang tua keluar sehingga shell mengira perintah telah selesai, dan proses anak melepaskan dari terminal dan lolos dari sesi login. Sejak proses induknya keluar, ID proses induknya menjadi 1, yang biasanya merupakan init
program, atau belakangan ini systemd
,. Proses ini memastikan untuk menuai anak-anaknya ketika mereka mati sehingga Anda tidak dibanjiri zombie.
Suatu proses dapat dikaitkan dengan terminal pengendali , yang mana ia biasanya mendapatkan input dari dan mengirimkan outputnya ke. Terminal juga dapat mengirim sinyal ke proses yang dilampirkan padanya, dan mengidentifikasi kelompok proses sebagai kelompok latar depan . Proses yang berada dalam kelompok latar depan diizinkan untuk membaca input dari terminal, dan dikirim sinyal SIGINT dan SIGSUSP ketika Anda menekan Ctrl-C dan Ctrl-Z. Setiap proses yang tidak dalam kelompok latar depan yang mencoba membaca dari terminal ditangguhkan dengan SIGTSTP.
Shell membuat grup proses yang berbeda untuk masing-masing perintah pipa yang Anda minta dijalankan, dan menggeser yang mana yang merupakan grup latar depan untuk memindahkan pekerjaan antara latar depan dan latar belakang. Ketika Anda menjalankan perintah, biasanya shell membuat grup proses baru dan membuat grup itu grup foreground . Jika Anda suffix dengan &
shell maka hanya meninggalkan grup latar depan di mana ia dan kelompok baru di latar belakang. Menekan Ctrl-Z mengirim SIGSUSP ke grup latar depan, yang menyebabkan sebagian besar perintah ditunda, tetapi alih-alih menangguhkan, shell mengubah kelompok latar depan yang aktif kembali ke dirinya sendiri sehingga dapat meminta Anda untuk perintah baru.
The bg
perintah mengirimkan SIGCONT untuk kelompok proses sehingga dapat kembali berjalan di latar belakang setelah ditangguhkan dengan SIGSUSP. fg
mengubah grup latar depan ke salah satu grup yang sudah berjalan di latar belakang, membawanya ke latar depan.
fork()
menyalin salinan diri sendiri, gunakanexec()
salinan itu. untuk menggantinya dengan apa yang ingin Anda jalankan, dan gunakanwait()
dalam contoh asli program (bukan salinan yang berjalanexec()
). Dalam periode waktu yang sangat, sangat singkat antara ketika anak keluar dan ketikawait()
menuai status keluar (menghapusnya dari tabel proses dan mengembalikannya ke pemanggil), Anda memiliki zombie.