|
Jednostavna bash scripta:
Kada se ovoj scripti poshalje SIGTERM, scripta se zavrshi, ali sleep ostane i dalje. Kako reshiti problem da cim scripti posaljem TERM signal, svi podprocesi se zavrshe? Naravno, ovo nije problem kad je sleep u pitanju, ali ako umesto sleepa imam rsync, on ce nastaviti da radi i radi dok ne zavrshi svoj posao, shto naravno ne zelim da se desi. Nashao sam neko rogobatno reshenje u zsh-u, u bash-u nisam nashao nikakvo, ali je reshenje u zsh ruzno i nezgrapno za ovako jednostavnu stvar. Postoji shansa da sam ja neshto prevideo (zato i postavljam pitanje). |
|
Uhvatis PID, pa ga eksplicitno ubijes:
i sad kad trap-ujes EXIT mos da ubijes po PID-u odlicno!, i u zsh sam morao ovo ovako da uradim, ali deo kako jednostavno ubiti process mi nije bio ovako jednostavan. I shto je najlepshe u bash-u radi kako treba, jer kad je bash u wait onda se trap odmah izvrshi.
(Sep 07 '10 at 12:22)
zsteva
|
|
Pokusaj da prosledis negativan pid kill komandi -- trebalo bi da da signal svim procesima sa istim pgid-om (process group id). Dakle Jedna opaska u vezi sa resenjem koje je dao @Luka: ako se ne varam, POSIX nalaze da shell koji dobije signal dok ceka na child proces handler izvrsava tek nakon sto |
|
Kod mene se opisani problem ne dogadja, sto je i logicno jer bi procesi trebali biti u istoj procesnoj grupi, i svi bi trebali dobiti SIGTERM signal. hmm.. meni je isto ovo cudno ponashanje, ali probano vishe puta ovo sa sleep, a i prava scripta gde je rsync.
(Sep 06 '10 at 23:54)
zsteva
hmm² .. danas kako testiram i kod mene je isto.. mora da sam juce prespavao taj "sleep" :)
(Sep 07 '10 at 15:58)
дамјан
bitno da Luka ima reshenje ;) I to relativno elegantno. vec sam se spremao da krenem kodiranje scripti u perlu :)
(Sep 07 '10 at 15:59)
zsteva
|
|
bash ima hookove za signale. hook moze ubiti bitne procese da ne ostanu visiti i ugasiti skriptu. callback() { echo callback exit 1 } trap callback EXIT tvoje stvari..sleep 20 trap - EXIT echo natural exit trap se kod bash-a izvrshava tek posle komande koja se trenutno izvrshava (u gornjem primeru sleep) tako da to nikako ne vrshi posao. kod zsh, postoji setopt TRAPS_ASYNC, koji onda izgrshi trap odmah, ali onda treba nekako ubiti podprocese.
(Sep 06 '10 at 23:48)
zsteva
savjet: ako koristite bash-izme, nemojte u hashbang staviti !/bin/shto je vjerojatno dash ili nešto drugo!
(Sep 14 '10 at 20:49)
dpavlin
|
|
|
Evo jos jedan primer sa druge mashine. (Dobro obe su ubuntu). Ajde nek neko proba ovaj scenario kod sebe. Pitanje i dalje stoji!!! I proshirenje: gde greshim?
|