Ctrl+C ne vždycky zabije proces

hm

Ctrl+C ne vždycky zabije proces
« kdy: 12. 09. 2013, 13:34:55 »
Mam konzolovou aplikaci v MONO.
Jako SSH klienta pouzivam PuTTY 0.63 na serveru mam nainstalovany Debian a openSSH

Uz se mi nekolikrat stalo, ze po zmacknuti CTRL+C se aplikace nezabila, ale zustala viset v procesech (mono), ale uz nic nedelala.
Nevite cim to muze byt? Celkem me tohle chovani znepokojuje.

Nevim totiz, jestli mi to takhle obcas blbne jen pri odeslani CTRL+C a nebo se muze i stat, ze uplne stejne selze i pozadani samotneho programu na zabiti sebe sama...
« Poslední změna: 12. 09. 2013, 14:10:49 od Petr Krčmář »


gamer

Re:ctrl+c ne vzdycky zabije proces
« Odpověď #1 kdy: 12. 09. 2013, 13:50:39 »
http://en.wikipedia.org/wiki/Control-C
It is a special sequence which causes the operating system to send a signal to the active program. Usually the signal causes it to end, but the program may "catch" it and do something else, typically returning control to the user.

tonda_

Re:ctrl+c ne vzdycky zabije proces
« Odpověď #2 kdy: 12. 09. 2013, 13:54:12 »
Singaly na linux

http://man7.org/linux/man-pages/man7/signal.7.html


crtl+c je SIGINT and ten muze byt odchycen a applice se muze rozhodnout co s tim...

Ivan

Re:Ctrl+C ne vždycky zabije proces
« Odpověď #3 kdy: 12. 09. 2013, 15:20:16 »
Zrovna mono dela se signalama divoky veci. Vcetne toho, ze si samo some posila signaly SIGUSR*.
Myslim, ze se tim snazi emulovat nejakou wokenni funkcionalitu.

Pokud aplikace sama tomu pozadavku odmita vyhovet, tak ti nezbude nic jinyho nez ji zabit.

libcha

Re:Ctrl+C ne vždycky zabije proces
« Odpověď #4 kdy: 12. 09. 2013, 18:28:41 »
Ovšem zde nastává otázka, jak program univerzálně zabít ?

Osobně mu umím poslat KILL (zabij se), ale i to často neposlechne - visí na nějakém I/O, byť třeba vysokoúrovňově síťovém, a ukáže ti prostředníček.


Ramtech

Re:Ctrl+C ne vždycky zabije proces
« Odpověď #5 kdy: 12. 09. 2013, 18:51:12 »
Použi SIGKILL

Re:Ctrl+C ne vždycky zabije proces
« Odpověď #6 kdy: 12. 09. 2013, 20:00:41 »
TROLL Say: Řešení je nepoužívat MONO ale v dnešní době STEREO (C++) či python/javu nebo prostě něco co funguje ... 

vbl

Re:Ctrl+C ne vždycky zabije proces
« Odpověď #7 kdy: 12. 09. 2013, 20:28:25 »
A co zkusit SIGQUIT, ktery je standardne namapovany na Ctrl-\ (control backspace)?

Ivan

Re:Ctrl+C ne vždycky zabije proces
« Odpověď #8 kdy: 13. 09. 2013, 10:54:52 »
Otevri si zdrojaky a pripoj k tomu debuger. Pak uvidis presne co se v te aplikaci deje.

vbl

Re:Ctrl+C ne vždycky zabije proces
« Odpověď #9 kdy: 13. 09. 2013, 12:50:51 »
A co zkusit SIGQUIT, ktery je standardne namapovany na Ctrl-\ (control backspace)?
Uf, samozrejme backslash...

hm

Re:Ctrl+C ne vždycky zabije proces
« Odpověď #10 kdy: 13. 09. 2013, 14:00:58 »
aha, ja si vzdy mylne myslel, ze ctrl+c je SIGKILL a to by mel byt ekvivalent prikazu `kill -9`?? Takze jsem ho pouzival spatne.
Jinak moje aplikace zadne signaly neodchytava. (Proto se to chova tak nahodne v pripade SIGINT ?)

Jediny na cem mi vlastne zalezi -  na konci behu aplikace ji nasilne vypinam (v ty dobe uz jsou vsechny zdroje s kterymi pracuji uvolneny)

 Process.GetCurrentProcess().Kill() -- tohle doufam je na linuxu SIGKILL, ale nemuzu to nikde dohledat... Pokud je to SIGKILL, tak ten snad ani odchytnout aplikaci nejde a tedy by se mel vzdy vykonat. Tim padem je vse v poradku.

Jinak duvod, proc takhle momentalne ukoncuji proces -  komentar nekoho jineho u jine mono aplikace
Kód: [Vybrat]
              // This is really ugly. However, mono doesn't exit even if all our threads are
                // terminated. libspotify internal threads are are still active and prevents mono
                // from exiting. Should be done with some other signal than SIGKILL.