Ano ang Proseso ng Zombie sa Linux?

Kung gumagamit ka ng Linux, maaaring nakakita ka ng mga proseso ng zombie na nagkakagulo sa iyong listahan ng mga proseso. Hindi ka makakapatay ng proseso ng zombie dahil patay na ito — parang isang aktwal na zombie.

Ang mga zombie ay karaniwang ang mga natitirang piraso ng mga patay na proseso na hindi pa nalilinis ng maayos. Ang isang program na lumilikha ng mga proseso ng zombie ay hindi na-program nang maayos - ang mga programa ay hindi dapat hayaang manatili ang mga proseso ng zombie.

Ano ang Proseso ng Zombie?

Upang maunawaan kung ano ang proseso ng zombie at kung ano ang nagiging sanhi ng paglitaw ng mga proseso ng zombie, kakailanganin mong maunawaan nang kaunti kung paano gumagana ang mga proseso sa Linux.





Kapag namatay ang isang proseso sa Linux, hindi lahat ng ito ay agad na naaalis sa memorya — nananatili sa memorya ang process descriptor nito (ang process descriptor ay kumukuha lamang ng kaunting memorya). Nagiging EXIT_ZOMBIE ang status ng proseso at inaabisuhan ang magulang ng proseso na namatay ang proseso ng anak nito na may signal na SIGCHLD. Ang proseso ng magulang ay dapat na isagawa ang wait() system call upang basahin ang katayuan ng paglabas ng patay na proseso at iba pang impormasyon. Pinapayagan nito ang proseso ng magulang na makakuha ng impormasyon mula sa patay na proseso. Pagkatapos tawagin ang wait(), ang proseso ng zombie ay ganap na tinanggal mula sa memorya.

Karaniwan itong nangyayari nang napakabilis, kaya hindi mo makikita ang mga proseso ng zombie na naipon sa iyong system. Gayunpaman, kung ang proseso ng magulang ay hindi na-program nang maayos at hindi kailanman tatawag ng wait(), ang mga zombie na bata nito ay mananatili sa memorya hanggang sa sila ay malinis.



Advertisement

Mga utility tulad ng GNOME System Monitor, ang itaas utos, at ang ps command na ipakita ang mga proseso ng zombie.

Mga Panganib ng Mga Proseso ng Zombie

Ang mga proseso ng zombie ay hindi gumagamit ng anumang mapagkukunan ng system. (Sa totoo lang, ang bawat isa ay gumagamit ng napakaliit na halaga ng memorya ng system upang iimbak ang descriptor ng proseso nito.) Gayunpaman, ang bawat proseso ng zombie ay nagpapanatili ng process ID nito (PID). Ang mga Linux system ay may limitadong bilang ng mga process ID — 32767 bilang default sa mga 32-bit system. Kung ang mga zombie ay nag-iipon sa napakabilis na rate — halimbawa, kung ang hindi wastong na-program na software ng server ay lumilikha ng mga proseso ng zombie sa ilalim ng pag-load — ang buong pool ng mga available na PID ay kalaunan ay itatalaga sa mga proseso ng zombie, na pumipigil sa iba pang mga proseso sa paglulunsad.



Gayunpaman, walang problema ang ilang proseso ng zombie — bagama't nagpapahiwatig sila ng bug sa proseso ng kanilang magulang sa iyong system.

KAUGNAYAN: Paano Gumagana ang Mga Signal ng Linux: SIGINT, SIGTERM, at SIGKILL

Pag-alis ng Mga Proseso ng Zombie

Hindi mo maaaring patayin ang mga proseso ng zombie dahil maaari mong patayin ang mga normal na proseso gamit ang SIGKILL signal — patay na ang mga proseso ng zombie. Tandaan na hindi mo kailangang alisin ang mga proseso ng zombie maliban kung mayroon kang malaking halaga sa iyong system — ang ilang mga zombie ay hindi nakakapinsala. Gayunpaman, may ilang mga paraan na maaari mong mapupuksa ang mga proseso ng zombie.

Ang isang paraan ay sa pamamagitan ng pagpapadala ng signal ng SIGCHLD sa proseso ng magulang. Ang signal na ito ay nagsasabi sa proseso ng magulang na isagawa ang wait() system call at linisin ang mga zombie na anak nito. Ipadala ang signal gamit ang pumatay utos, pagpapalit pid sa utos sa ibaba kasama ang PID ng proseso ng magulang:

pumatay -s SIGCHLD pid

Gayunpaman, kung ang proseso ng magulang ay hindi na-program nang maayos at binabalewala ang mga signal ng SIGCHLD, hindi ito makakatulong. Kailangan mong patayin o isara ang proseso ng magulang ng mga zombie. Kapag natapos na ang prosesong lumikha ng mga zombie, namamana ng init ang mga proseso ng zombie at naging kanilang bagong magulang. (init ang unang proseso na sinimulan sa Linux sa boot at itinalaga ang PID 1.) pana-panahong ginagawa ng init ang wait() system call upang linisin ang mga anak nitong zombie, kaya ang init ay gagawa ng maikling gawain sa mga zombie. Maaari mong i-restart ang proseso ng magulang pagkatapos itong isara.

Advertisement

Kung ang proseso ng magulang ay patuloy na lumikha ng mga zombie, dapat itong ayusin upang maayos itong tumawag ng wait() para anihin ang mga anak nitong zombie. Mag-file ng ulat ng bug kung patuloy na lumilikha ng mga zombie ang isang program sa iyong system.

BASAHIN SUNOD Larawan sa Profile para kay Chris Hoffman Chris Hoffman
Si Chris Hoffman ay Editor-in-Chief ng How-To Geek. Nagsulat siya tungkol sa teknolohiya sa loob ng mahigit isang dekada at naging kolumnista ng PCWorld sa loob ng dalawang taon. Sumulat si Chris para sa The New York Times, napanayam bilang isang eksperto sa teknolohiya sa mga istasyon ng TV tulad ng NBC 6 ng Miami, at nasakop ang kanyang trabaho ng mga outlet ng balita tulad ng BBC. Mula noong 2011, nagsulat si Chris ng higit sa 2,000 mga artikulo na nabasa nang halos isang bilyong beses---at dito lang sa How-To Geek.
Basahin ang Buong Bio

Kagiliw-Giliw Na Mga Artikulo