borzole Napisano Grudzień 23, 2009 Zgłoszenie Share Napisano Grudzień 23, 2009 Mam w skrypcie coś takiego: fun_abc fun_demon & fun_interfejs czyli w trakcie działania skryptu jakaś jego część oddziela się i żyje własnym życiem. No i mam problem jak kontrolować jej działanie, a w szczególności ładnie zakończyć wysyłając sygnał inny niż "killall". Obecnie robię to tak, że moja funkcja demon komunikuje się z resztą przez istnienie jakiegoś pliku "semafora" lub jego zawartość, bo "export" zmiennych coś tu nie działa. Przy czym sprawdzanie następuje co parę sekund, więc reakcja jest opóźniona. W jednej z opcji zenity (ikonka w zasobniku, pasek postępu) można tak zrobić, że się otwiera nowy deskryptor pliku a zenity nasłuchuje i natychmiast reaguje. Przydała by się taka opcja "nasłuchiwania", ale nie widziałem tego nigdy w skrypcie bash. Pomysły? Czego szukać? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Grudzień 23, 2009 Zgłoszenie Share Napisano Grudzień 23, 2009 Może screen? W nim dosyć łatwo można zarządzać aplikacjami działającymi w tle. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Grudzień 23, 2009 Autor Zgłoszenie Share Napisano Grudzień 23, 2009 screen w skrypcie? chyba jestem mocno nie w temacie. Ciekawe, że monitor systemu z gnome widzi 2-3 procesy, ale echo $$ zwraca ciągle ten sam numer skryptu. Natomiast jak wyrzucę "killall" w takiej funkcji to mam inny numerek np.: [lucas@jedral ~]$ ./zdp.lab [main]::23347 [min_icon]::23347 [demonek]::23347 ... /usr/local/sbin/zdp.lab: line 1: 23360 Zakończony min_icon pokombinuję jeszcze z deskryptorem pliku, że może jakoś w pętli będzie nasłuchiwał, ale nie mam pomysłu :lammer: Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morsik Napisano Grudzień 23, 2009 Zgłoszenie Share Napisano Grudzień 23, 2009 killall to program a nie sygnał. Domyślnie wysyła sygnał SIGTERM. Jeśli potrzebujesz inny wystarczy sprecysować (killall -s KILL - dla przykładu). Z tego co kojarzę, to SIGINT jest wywoływany przy naciśnięciu Ctrl+C. Może takiego sygnału chcesz użyć? Dajesz więc: killall -s SIGINT <nazwa_programu> Jeśli potrzebujesz dokładny program (wg. PIDu) to robisz (wg. mana): kill -s SIGINT <pid> Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Luty 2, 2010 Autor Zgłoszenie Share Napisano Luty 2, 2010 PID procesu, który właśnie przeszedł w tlo to po prostu $! zenity --info --text "nie klikaj, zaraz mnie zabije" & TLO=$! sleep 3 kill -TERM $TLO # lub # kill -s SIGTERM $TLO ech, jak to jest, że to czego potrzebujemy pojawia się zawsze po czasie [EDIT] okazuje się, że komunikacja też jest w miarę możliwa dzięki mkfifo Using Named Pipes (FIFOs) with Bash Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morg Napisano Kwiecień 3, 2010 Zgłoszenie Share Napisano Kwiecień 3, 2010 Może to Ci się przyda: [root@charon ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX [root@charon ~]# Opcja nasłuchiwania: trap ' clear; printf "\n\n\n\tNacisnieto CTRL-C\n\n\n" ' SIGINT Przykład należy odpowiednio zmodyfikować. M. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Kwiecień 3, 2010 Autor Zgłoszenie Share Napisano Kwiecień 3, 2010 Dzięki, już do tego dobrnąłem jakiś czas temu. Nadmienię tylko, że do sterowania można użyć sygnałów powyżej 35, czyli SIGRTMIN+n o czym wspomina man 7 signal Właściwie to w tym wątku jest już wszystko co potrzeba do zrobienia skryptów typu klient-serwer, komunikujących się albo przez stały kanał (mkfifo), albo przechwytując sygnały przerwań. Gites, tylko do czego to wykorzystać. [ EDIT ] Przykład z sygnał+trap jest w tym wątku Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się