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