Kas ir Linux "garlaicīgs process"?

Satura rādītājs:

Kas ir Linux "garlaicīgs process"?
Kas ir Linux "garlaicīgs process"?

Video: Kas ir Linux "garlaicīgs process"?

Video: Kas ir Linux
Video: How to Remove Browser Hijackers? - YouTube 2024, Novembris
Anonim
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.
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 mirušo procesu atliekas, kas nav pareizi iztīrītas. Programma, kas rada zombiju procesus, nav pareizi ieprogrammēta - programmās nav paredzēts, lai zombiju procesi paliktu apkārt.

Kas ir garlaicīgs process?

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

Kad process mirst uz Linux, tas viss netiek noņemts no atmiņas nekavējoties - tā 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.

Utilītas, piemēram, GNOME sistēmas monitors, tops komandu un ps komanda parāda zombiju procesus.

Image
Image

Zombiju procesu draudi

Zombiju procesi neizmanto nekā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 atrodas apkārt, nav problēmu, lai gan tie norāda uz kļūdu, kas saistīta ar vecāku procesu jūsu sistēmā.

Image
Image

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 uz vecāku procesu. Šis signāls parāda vecāku procesu, lai izpildītu sistēmas zvanu () un sakārtotu zombiju bērnus. Sūtīt signālu ar nogalināt komandu, aizstājot pid tālāk norādītajā komandā ar vecāku procesa PID:

kill -s SIGCHLD pid

Tomēr, ja vecāku process nav pareizi ieprogrammēts un ignorē SIGCHLD signālus, tas nepalīdzēs. Jums 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.

Ieteicams: