[ LUGOS ] for( ; ; fork());
Jernej Kovse
jernej.kovse na uni-mb.si
Pet Jan 23 10:10:37 CET 1998
On Fri, 23 Jan 1998, polz wrote:
> Vem, kaj naredi zankica for(;;fork()); .
> Zanima me le, kako naj ubijem program, ki jo vsebuje.
>
> Vceraj sem (testing! testing!) program s to zankico pognal in poizkusil:
>
> kill PID (PID prvega procesa) - prvi umrl, nastal pa je nov proces.
> kill -9 PID (PID drugega procesa) - isto
> killall forker (ime programa) - isto
> killall -9 forker - isto.
> killall -9 bash - zadevi sem ubil shell, iz katerega je bila pognena, pa je se
> zmeraj zivela
> killall X - stvar sem pognal iz X11R6 - se vedno zivela!!
>
> Koncno je pomagl init 1 (single user mode), v katerega pa je stvar zaradi
> zasedenosti lezla okrog pol ure (ce ne se vec).
>
> Kako bi torej gornji program ubil na lazji, elegantnejsi nacin
> (predvsem pa brez ubijanja vseh tekocih procesov).
>
> Upam, da kdo ve ...
>
>
> P.S. Kaj takega se v win95 ne more zgoditi - gotovo bom presaltal nanje,
> ker imajo VARNEJSI multitasking . (*NUTZ!*)
>
Ubiti moras primarni starsevski proces, torej tisti, ki je prvi izvedel
fork. Dodaj -9 switch (kill subprocesses). Ce cakas predolgo, se v praksi
velikokrat zgodi, da forki zasedejo vse mozne PIDe, tako, da masina obvisi
nekje v zraku. Ne ostane ti drugega kot reset. Sicer lahko to (deloma)
resis tako, da imas stevilo PIDov na userja omejeno, ampak sistem je
praviloma vseeno obremenjen, ker fork() zabija karnel z zahtevami po
novem PIDu, ta pa mu ga ne more vec dodeliti. Razlicni unixi se pri tem
problemu zelo razlicno obnasajo.
Jernej
*******************************************************************
Jernej Kovse E-mail: jernej.kovse na uni-mb.si
Simekova 22 WWW: http://www2.feri.uni-mb.si/~jernej
2000 Maribor
Slovenia CS Student
University of Maribor
Faculty of Electrical Engineering and Computer Science
*******************************************************************
Dodatne informacije o seznamu Starilist