20Aug

Kas ir Linux "garlaicīgs process"?

Ja esat Linux lietotājs, iespējams, ka esat redzējis zombiju procesus, kas ir saistīti ar jūsu procesu sarakstu. Jūs nevarat nogalināt zombiju procesu, jo tas jau ir miris - tāpat kā faktiskais zombijs.

Zombiji būtībā ir atlikušie bitu pārtraukumi, kas pareizi nav iztīrīti. Programma, kas izveido zombiju procesus, nav pareizi ieprogrammēta - programmās nav paredzēts, lai zombiju procesi paliktu apkārt.

Image Credit: Daniel Hollister par Flickr( Remixed)

Kas ir Zombiju process?

Lai saprastu, kas ir zombiju process un kas izraisa zombiju procesus, jums ir jāsaprot mazliet par to, kā procesi darbojas Linux.

Kad procesā iestājas Linux, tas viss netiek noņemts no atmiņas nekavējoties - procesa deskriptors paliek atmiņā( procesa deskriptors ņem tikai nelielu atmiņas apjomu).Procesa statuss kļūst par EXIT_ZOMBIE, un procesa vecākiem tiek paziņots, ka bērna process ir miris ar SIGCHLD signālu. Tad mātes procesam vajadzētu izpildīt() sistēmas izsaukumu, lai izlasītu miršanas procesa izejas statusu un citu informāciju. Tas ļauj mātes procesam iegūt informāciju no mirušā procesa. Pēc tam, kad tiek gaidīts() , zombiju process tiek pilnībā noņemts no atmiņas.

Tas parasti notiek ļoti ātri, tāpēc jūs neredzēsiet zombiju procesus, kas uzkrājas jūsu sistēmā.Tomēr, ja vecāku process nav pareizi ieprogrammēts un nekad nezvana, pagaidiet() , tā zombiju bērni paliks atmiņā, līdz tie tiks iztīrīti.

komunālie pakalpojumi, piemēram, GNOME sistēmas monitors, top komanda un ps komandu displejs, zombiju procesi.

Zombiju procesu draudi

Zombiju procesi neizmanto jebkādus sistēmas resursus.(Faktiski katrs no tiem izmanto ļoti mazu sistēmas atmiņu, lai saglabātu procesa deskriptoru). Tomēr katrs zombiju process saglabā procesa ID( PID).Linux sistēmām ir ierobežots skaits procesu identifikatoru - 32767 pēc noklusējuma 32 bitu sistēmās. Ja zombiji uzkrājas ļoti strauji - piemēram, ja nepareizi ieprogrammēta servera programmatūra rada zombiju procesus zem slodzes - viss pieejamo PID kopums galu galā tiks piešķirts zombiju procesiem, liedzot citiem procesiem palaist.

Tomēr daži no zombiju procesiem, kas atrauties, nav problēmu, lai arī tie norāda uz kļūdu, kas rodas jūsu vecāka procesā jūsu sistēmā.

Atbrīvošanās no garlaicības procesiem

Jūs nevarat nogalināt zombiju procesus, jo jūs varat nogalināt normālos 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 jums nav liela summa jūsu sistēmā - daži zombiji ir nekaitīgi. Tomēr ir daži veidi, kā atbrīvoties no zombiju procesiem.

Viens no veidiem ir, nosūtot SIGCHLD signālu mātes procesam.Šis signāls parāda vecāku procesu, lai izpildītu sistēmas zvanu() un sakārtotu zombiju bērnus. Nosūtiet signālu ar komandu, nogādājiet komandu, aizstājot pid zemāk esošajā komandā ar vecāka procesa PID:

kill -s SIGCHLD pid

. Tomēr, ja vecāks process nav pareizi ieprogrammēts un ignorē SIGCHLD signālus, tas uzvart palīdzētJums būs jānokauj vai jāaizver zombiju vecāku process. Kad process, kas izveidoja zombijus, beidzas, init pārmanto zombiju procesus un kļūst par jauno vecāku.(init ir pirmais process, kas palaists Linux pie sāknēšanas un tiek piešķirts PID 1.) init periodiski izpilda sistēmas( zvanu) gaidīšanas() , lai iztīrītu zombiju bērnus, tāpēc init veiks zombiju īsu darbu. Jūs varat restartēt vecāku procesu pēc tā aizvēršanas.

Ja mātes process turpina veidot zombijus, tas ir jānosaka tā, lai tas pienācīgi izsauktu() gaidīt zombiju bērnus. Faila kļūdu ziņojums, ja jūsu sistēmas programma turpina radīt zombijus.