zombi processzek kilovese

Fórumok

zombi processzek kilovese

Hozzászólások

sziasztok,

csak fovesztes terhe mellett elbootolhato szerveren hogyan lehet kiloni a zombi processzeket?

a ps ezt mutatja roluk:

13726 ? Z 0:40 [java <defunct>]

koszi,

mogorva

[quote:d0201e0897="mogorva"]sziasztok,

csak fovesztes terhe mellett elbootolhato szerveren hogyan lehet kiloni a zombi processzeket?

a ps ezt mutatja roluk:

13726 ? Z 0:40 [java <defunct>]

koszi,

mogorva

kemeny problema;)

ps fax-al nezg meg, hatha valami log rajta, ha azt kilovod ezt is lehet utana
ha IO-ra var (neha elofordul), es ha modulos a kernel, akkor az IO-val kapcsolatos modulok egyesevel valo rmmod, majd modprobe el szokta engedni, es utana kiloheto.

$ ps fax | grep Z

\_ grep Z
\_ [process1 <defunct>]
\_ [process2 <defunct>]

Az, hogy esetleg IO-ra var (sajnos nem valoszinu) hogyan tudhato meg?

mogorva

Legjobb tudomásom szerint zombi azt jelenti, hogy már kilépett, viszont a szülője még nem szabadította fel a kilépési információját. man 2 waitpid.
Tehát lődd ki a szülőjét, és eltűnik pereputtyostól. Ha nincs szülője (volt, csak a child setsid()-et mondott, stb.), akkor viszont ki lehet tűzni az IJ zászlót, legalábbis én a reboot-nál elegánsabbat nem tudok erre az esetre. Esetleg az Alt-SysRq 'kIll' parancsát érdemes megnézni, ha konzolnál vagy, de ezt még nem próbáltam.

[quote:fa062a50eb="mogorva"]Az, hogy esetleg IO-ra var (sajnos nem valoszinu) hogyan tudhato meg?

A ps 'D'-vel jelzi. man ps:
PROCESS STATE CODES
D uninterruptible sleep (usually IO)
R runnable (on run queue)
S sleeping
T traced or stopped
W paging (2.4 kernels and older only)
X dead
Z a defunct ("zombie") process

Koszi a valaszokat, valszeg reboot lesz.

Tenyleg semmi mod nincs arra, hogy a process table-t kezzel kipucolja az ember? Vagy ez annyira extrem kivansag, hogy fel sem merul pl. a kernel fejlesztoknel, mint lehetoseg?

mogorva

gsimonnak van igaza, a zombie (Z) és az IO-ra vár (D) két egymást kizáró állapot. A zombi processz már kilépett, csak adminisztratíve még nyilvántartja őt a rendszer, foglal mondjuk 1kB-ot vagy mittomménmennyit, jelképeset, és akkor fog eltűnni ha vagy kilövöd a szülőjét, vagy a szülő végrehajt rá egy waitpid()-et.

[quote:7c03f8e54f="mogorva"]Tenyleg semmi mod nincs arra, hogy a process table-t kezzel kipucolja az ember? Vagy ez annyira extrem kivansag, ...

Az vele a gond, hogy sok az egymásrahatás a processzek között, és nem mindig egyértelmű, hogy mit is kellene csinálni azon kívül, hogy elfelejtünk egy processzt. Csak példaként:
- Kell-e értesíteni a szülőjét, hogy kihalt, ill. fenn kell-e tartani a kilépési státuszt (zombie állapot)
- Ha van megnyitva socket, és a kimenő pufferében van még el nem küldött adat, ki kell-e küldeni, ill. mennyit szabad várni a kiküldésre.
- Ha a processz használ megosztott memóriát (shared mem), akkor azzal mi legyen, pláne, ha ő az utolsó, aki tartja.
- Ha tart fogva egy (több...) szemafort, de épp egy másikra vár, mi legyen a már lefoglaltakkal, pl. milyen sorrendben kell felszabadítani, hogy a többi processz ne szakadjon össze.
- Ha épp egy kernel művelet közepén jár (pl. karcos cd-t akar olvasni), mi legyen a kernel által épp használt átmeneti lock-okkal, memóriával, stb.
- Ha neadj'Isten pont kernel modulból kihozott userspace hook, akkor a modult is ki kell-e lőni vele együtt, és ha igen, ki rak rendet utána (beinstallált interrupt handlerek, stb.)
- Ha filerendszer-hook (samba, nfs daemon), mi legyen azokkal, akik használják (nem csak a helyi gépen...)
- Ha setuid-os volt a progi, és pl. bemountolt valamit, le kell-e/szabad-e mountolni, mert a user tutira nem fogja tudni.

Szóval nem egyértelmű, és szvsz nem igazán lehetne úgy kilőni valamit, hogy utána megbízhatóan működőképes maradjon a rendszer. Hasonló nyűgök vannak egyébként a --force umount-tal és modul eltávolítással is, nem véletlen, hogy fázik tőlük mindenki, és hogy elég veszélyes is mindkettő.

[quote:4a30d788d4="egmont"]gsimonnak van igaza, a zombie (Z) és az IO-ra vár (D) két egymást kizáró állapot. A zombi processz már kilépett, csak adminisztratíve még nyilvántartja őt a rendszer, foglal mondjuk 1kB-ot vagy mittomménmennyit, jelképeset, és akkor fog eltűnni ha vagy kilövöd a szülőjét, vagy a szülő végrehajt rá egy waitpid()-et.

Elvileg, ha jol emlekszem, akkor a szulojet vesztett processzeket az init veszi magahoz es idorol idore elintezi oket... Thehat ha eleget varsz, akkor ezek a fajta Zombik eltunnek...

De ha rosszul emlekszem, valaki cafoljon meg...

Zsiraf

gsimon

ebben mind igazad van, de ha vmi mar zombi, akkor ki gondoskodik az utana maradt szemet eltakaritasarol? jo, igy biztosan stabilabb marad a rendszer, mintha en nyulok bele a magikus cpt (clean process table) paranccsal (amit most talaltam ki, mielott barki keresni kezdi!), de neha nagyon gaz, hogy vmi nem bir elindulni, mert a sajat zombijarol azt hiszi, hogy az o maga, a gep elbootolasahoz meg az atyauristen engedelye is kell. B-/

szaszg

errol en is olvastam, de ezt az idotartamot nem lehet vhogy szabalyozni?

mogorva