doruceni signalu KILL procesu ktery neprerusitelne spi

Divacky Roman xdivac02 at stud.fit.vutbr.cz
Fri Sep 12 12:25:29 CEST 2003


On Thu, Sep 11, 2003 at 01:49:14PM +0200, Dan Lukes wrote:
> Jaroslav Klaus wrote:
> 
> >>>>>>"DR" == Divacky Roman <xdivac02 at stud.fit.vutbr.cz> writes:
> >    DR> napadlo mne jedine reseni - zaridit aby KILL prerusil ten tsleep() 
> >    a
> >    DR> zpracoval se normalne... 
> >
> >Kdyby toto autor volani tsleepu chtel, mohl volat tsleep s priznakem
> >PCATCH prip., jak uz Dan uvedl, by zvolil nejaky timeout. To ze tomu
> >tak neni, ma jiste duvody (jiz byly zmineny).
> 
> 
> 	No, ono neni prilis dobre, ze v systemu mohou existovat 
> "nesestrelitelne" procesy. Ja take povazuji za chybu, ze SIGKILL muze 
> proces nezabit, chybu, kterou, kdyby se podarilo opravit, bylo by to pekne.

presne o tohle mi jde... system by mel cloveku dovolit zabit kazdy proces
 
> 	Ja si jen nemyslim, ze ji lze opravit tak jednoduse, jak Roman 
> navrhoval ...
> 
> 						Dan

uvazoval jsem o tom a prisel jsem na tohle:

kdyz prerusim ten tsleep tak se vrati s nejakou error hodnotou, coz pri typicke
konstrukci

neco();
if (nekde_neco){
   tsleep(nekde...);
}
neco_dalsiho();

by melo byt schopno osetrit to, ze ten tsleep neuspel a zachovat se podle toho
(tj. odemcit zamky atd. jaks popisoval predtim) - podle nastaveni nekde_neco

doopravdy jediny problem ted zustava to, co by se stalo kdybych killnul proces
ktery dela nejake IO v tom tsleepu a po killnuti toho procesu to IO nakonec
uspelo - zapise to neco nekam -> problem

napadlo mne nekolik reseni: 
1) pockat, zadna IO netrva dele jak rekneme x sekund (to je ale dost hloupe)
2) nejak odtracovat ktere IO se zavolalo a osetrit to (bohuzel to nemam poneti
jak by se dalo nejak inteligentne udelat)
3) nechat si z procesu vm_space a udelat z nej neco jako kernelovy "/dev/null"
(tj. zapis nic neudela, cteni vraci nulu) - to ovsem dost dobre nevim jak delat



More information about the Users-l mailing list