Mājas lapa » » Kas ir „zombiju process” Linux?

    Kas ir „zombiju process” Linux?

    Ja esat Linux lietotājs, jūs, iespējams, esat redzējuši zombiju procesus ap procesiem. Jūs nevarat nogalināt zombiju procesu, jo tas jau ir miris - kā īsts zombijs.

    Zombiji būtībā ir mirušo procesu atlikumi, kas nav pareizi iztīrīti. Programma, kas rada zombiju procesus, nav pareizi ieprogrammēta - programmas nav paredzētas, lai ļautu zombiju procesiem apiet.

    Attēla kredīts: Daniel Hollister par Flickr (Remixed)

    Kas ir garlaicīgs process?

    Lai saprastu, kas ir zombiju process un kas izraisa zombiju procesus, jums būs jāsaprot mazliet par to, kā procesi darbojas Linux sistēmā.

    Kad process nomirst Linux, tas netiek nekavējoties izņemts no atmiņas - tā procesu deskriptors paliek atmiņā (procesa deskriptors aizņem tikai nelielu atmiņas apjomu). Procesa statuss kļūst par EXIT_ZOMBIE, un procesa vecākam tiek paziņots, ka ar SIGCHLD signālu mirst bērna process. Vecākajam procesam pēc tam vajadzētu izpildīt sistēmas (Call) sistēmu, lai nolasītu mirušā procesa izejas statusu un citu informāciju. Tas ļauj vecākiem iegūt informāciju no mirušā procesa. Pēc gaidīšanas () tiek saukts zombiju process no atmiņas.

    Tas parasti notiek ļoti ātri, tāpēc jūsu sistēmā nebūs redzami zombiju procesi. Tomēr, ja vecāku process nav pareizi ieprogrammēts un nekad nav gaidījis (), tā zombiju bērni saglabā atmiņā atmiņu, līdz tie tiks iztīrīti.

    Utilities, piemēram, GNOME System Monitor, tops komandu un ps komandu displeja zombiju procesi.

    Zombiju procesu draudi

    Zombiju procesi neizmanto sistēmas resursus. (Faktiski, katrs no tiem izmanto ļoti nelielu sistēmas atmiņas apjomu, lai saglabātu savu procesu deskriptoru.) Tomēr katrs zombiju process saglabā procesa ID (PID). Linux sistēmām ir ierobežots skaits procesu ID - 32767 pēc 32 bitu sistēmām. Ja zombiji uzkrājas ļoti ātri - piemēram, ja nepareizi ieprogrammēts servera programmatūra rada slodzes zombiju procesus - viss pieejamo PID kopums galu galā tiks piešķirts zombiju procesiem, novēršot citu procesu sākšanu.

    Tomēr daži zombiju procesi, kas apturās, nav problēma - lai gan tie norāda uz kļūdu ar vecāku procesu jūsu sistēmā.

    Atbrīvoties no zombiju procesiem

    Jūs nevarat nogalināt zombiju procesus, jo jūs varat nogalināt normālus procesus ar SIGKILL signālu - zombiju procesi jau ir miruši. Paturiet prātā, ka jums nav nepieciešams atbrīvoties no zombiju procesiem, ja vien jūsu sistēmā nav liela summa - daži zombiji ir nekaitīgi. Tomēr ir daži veidi, kā jūs varat atbrīvoties no zombiju procesiem.

    Viens no veidiem ir SIGCHLD signāla nosūtīšana uz vecāku procesu. Šis signāls stāsta vecākiem procesiem, lai izpildītu gaidīšanas () sistēmas zvanu un sakoptu savus zombiju bērnus. Nosūtīt signālu ar nogalināt komandu, aizstājot pid zemāk esošajā komandā ar mātes procesa PID:

    nogalināt -s SIGCHLD pid

    Tomēr, ja mātes process nav pareizi ieprogrammēts un ignorē SIGCHLD signālus, tas nepalīdzēs. Jums būs jānogalina vai jāslēdz zombiju vecākais process. Kad process, kas izveidoja zombijus, beidzas, init pārmanto zombiju procesus un kļūst par viņu jauno vecāku. (init ir pirmais process, kas sākās Linux sāknēšanas laikā, un tam ir piešķirts PID 1.) init periodiski izpilda gaidīšanas () sistēmas zvanu, lai attīrītu savus zombiju bērnus, tāpēc init veiks zombiju īsu darbu. Pēc aizvēršanas varat atsākt vecāku procesu.

    Ja vecāku process turpina veidot zombijus, tas ir jānosaka tā, lai tas pareizi zvanītu (), lai gūtu savus zombiju bērnus. Iesniegt kļūdu ziņojumu, ja jūsu sistēmas programma turpina radīt zombijus.