Apa itu proses zombie?


138

Dengan perintah seperti topdan berbasis gui System Monitorsaya dapat melihat bahwa saat ini saya memiliki beberapa proses zombie.

Apa itu proses zombie?

Apakah mereka memengaruhi kinerja sistem atau aplikasi tempat mereka menjadi zombie. Apakah mereka menggunakan terlalu banyak memori atau memori sama sekali?


39
Mereka adalah proses yang ingin memakan cpu Anda;)
Luis Alvarado

8
untuk makan siang ... :)
RolandiXor

3
Proses-proses ini sudah mati tetapi tidak dikubur.
Prateek Joshi

2
Makan CPU saya ?! Itu benar-benar menakutkan!
Håvard Geithus

Jawaban:


162

Zombi adalah proses MATI. Mereka tidak dapat 'membunuh' (Anda tidak dapat membunuh MATI). Semua proses akhirnya mati, dan ketika mereka melakukannya mereka menjadi zombie. Mereka hampir tidak mengkonsumsi sumber daya, yang diharapkan karena mereka sudah mati! Alasan zombie adalah agar orang tua zombie (proses) dapat mengambil status keluar zombie dan statistik penggunaan sumber daya. Induk memberi tanda sistem operasi bahwa ia tidak lagi membutuhkan zombie dengan menggunakan salah satu dari panggilan tunggu () sistem.

Ketika suatu proses mati, anaknya memproses semua menjadi anak-anak dari proses nomor 1, yang merupakan proses init. Init `` selalu '' menunggu anak-anak mati, sehingga mereka tidak tetap sebagai zombie.

Jika Anda memiliki proses zombie, artinya zombie tersebut belum ditunggu oleh orang tua mereka (lihat PPID yang ditampilkan oleh ps -l). Anda memiliki tiga pilihan: Perbaiki proses induk (tunggu sebentar); bunuh orang tua; atau hidup dengannya. Ingatlah bahwa hidup dengan itu tidak begitu sulit karena zombie mengambil sedikit lebih dari satu baris tambahan dalam output ps.

Zombi dapat diidentifikasi dalam output dari perintah ps Unix dengan kehadiran "Z" di kolom STAT. Zombi yang ada selama lebih dari periode waktu singkat biasanya menunjukkan bug di program induknya. Seperti kebocoran lainnya, keberadaan beberapa zombie tidak mengkhawatirkan dengan sendirinya, tetapi dapat mengindikasikan masalah yang akan menjadi serius di bawah beban yang lebih berat.

Untuk menghapus zombie dari suatu sistem, sinyal SIGCHLD dapat dikirim ke induk secara manual, menggunakan perintah kill. Jika proses induk masih menolak untuk menuai zombie, langkah selanjutnya adalah menghapus proses induk. Ketika suatu proses kehilangan induknya, init menjadi induk baru. Init secara berkala mengeksekusi panggilan sistem tunggu untuk menuai zombie apa pun dengan init sebagai induk.

Ada juga proses yatim yang merupakan proses komputer yang proses induknya telah selesai atau diakhiri.

Suatu proses dapat menjadi yatim piatu selama doa jarak jauh ketika proses klien macet setelah membuat permintaan server.

Anak yatim memboroskan sumber daya server dan berpotensi meninggalkan server dalam kesulitan (Ini adalah perbedaan sumber daya terbesar antara zombie dan anak yatim (Kecuali jika Anda menonton film zombie anak yatim). Namun ada beberapa solusi untuk masalah proses anak yatim:

  1. Pemusnahan adalah teknik yang paling umum digunakan; dalam hal ini proses anak yatim terbunuh.

  2. Reinkarnasi adalah teknik di mana mesin secara berkala mencoba mencari orang tua dari segala komputasi jarak jauh; di mana proses yatim piatu terbunuh.

  3. Kedaluwarsa adalah teknik di mana setiap proses diberikan sejumlah waktu untuk diselesaikan sebelum dibunuh. Jika perlu proses dapat "meminta" lebih banyak waktu untuk menyelesaikan sebelum waktu yang ditentukan berakhir.

Suatu proses juga dapat menjadi yatim piatu yang berjalan pada mesin yang sama dengan proses induknya. Dalam sistem operasi mirip-UNIX, setiap proses yatim piatu akan segera diadopsi oleh proses sistem "init" khusus. Operasi ini disebut pengasuhan ulang dan terjadi secara otomatis. Meskipun secara teknis proses tersebut memiliki proses "init" sebagai induknya, proses ini masih disebut proses yatim karena proses yang semula membuatnya tidak ada lagi.

Info lebih lanjut:

http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU

http://www.linuxsa.org.au/tips/zombies.html

http://www.brighthub.com/computing/linux/articles/79186.aspx

Bagaimana cara mengidentifikasi dan membunuh proses gantung, ketika sistem hang dan bereaksi lambat pada input pengguna?

Membunuh proses yang berjalan di mesin Ubuntu dari jarak jauh dari mesin windows yang ada di LAN


18
Ekhm! Anda BISA membunuh orang mati! Anda hanya harus membidik kepala. Atau apakah mereka berbohong kepada kita sepanjang waktu?
Marcin Kaminski

1
initmeminta waitsemua proses anaknya baik itu, zombie, yatim piatu (diadopsi) dan biologis (self-spawned)?
Bleeding Fingers

1
mnrt. ke World War Z gunakan kamuflase: P
عثمان غني

Tolong beri medali untuk @MarcinKaminski!
Andrea

20

Proses zombie (juga ditampilkan sebagai <defunct>), sama sekali bukan proses nyata. Mereka hanya entri dalam tabel proses kernel. Ini adalah satu-satunya sumber daya yang mereka konsumsi. Mereka tidak mengkonsumsi CPU atau RAM. Satu-satunya bahaya memiliki zombie, kehabisan ruang dalam tabel proses (Anda dapat menggunakan cat /proc/sys/kernel/threads-maxuntuk melihat berapa banyak entri yang diizinkan pada sistem Anda).

Mereka muncul hanya ketika proses induk mereka (yaitu proses yang fork()'edmereka) hidup, tetapi belum memanggil wait()fungsi sistem. Setelah orang tua meninggal, para zombie yang wait()'edoleh initdan menghilang.


4
Layar top`` dalam pertanyaan ini tampaknya bertentangan dengan Anda? Di sana, zombie tampaknya menggunakan 100% dari 1 CPU, tetapi tidak ada memori.
Torben Gundtofte-Bruun

7

Ketika sebuah child processberakhir, kematiannya dikomunikasikan kepada orang tuanya sehingga orang tua dapat mengambil tindakan yang tepat.

A processyang menunggu orang tuanya menerima kode pengembaliannya disebut proses zombie .

Mereka memiliki completed their executiontetapi masih memiliki entrydalam process table.


1

Proses zombie adalah proses yang telah berhenti berjalan tetapi entri tabel proses mereka masih ada karena proses induk belum mengambilnya melalui syscall tunggu. Secara teknis setiap proses yang berakhir adalah zombie untuk waktu yang sangat singkat tetapi mereka bisa hidup lebih lama.

Proses zombie yang bertahan lebih lama terjadi ketika proses induk tidak memanggil tunggu syscall setelah proses anak selesai. Satu situasi di mana ini terjadi adalah ketika proses induk ditulis dengan buruk dan hanya menghilangkan panggilan tunggu atau ketika proses induk mati sebelum anak dan proses induk baru tidak memanggil menunggu di atasnya. Ketika orangtua proses meninggal sebelum anak, OS menetapkan proses anak ke proses "init" atau PID 1. yaitu proses init "mengadopsi" proses anak dan menjadi orangtuanya. Ini berarti bahwa sekarang ketika proses anak keluar dari orang tua baru (init) harus memanggil waitto untuk mendapatkan kode keluarnya atau entri tabel prosesnya tetap selamanya dan itu menjadi zombie

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.