Mam płytę CD na żywo, która uruchamia się w systemie Linux i uruchamia mały skrypt Bash. Skrypt wyszukuje i uruchamia drugi program (zwykle jest to skompilowany plik binarny C ++).
Powinieneś być w stanie przerwać drugi program, naciskając Ctrl+ C. To, co powinno się stać, to zatrzymanie drugiego programu, a skrypt Bash kontynuuje czyszczenie. Tak naprawdę dzieje się tak, że zarówno główna aplikacja, jak i skrypt Bash kończą się. Co jest problemem.
Więc użyłem trap
wbudowanego polecenia, aby powiedzieć Bashowi, aby zignorował SIGINT. A teraz Ctrl+ Ckończy aplikację C ++, ale Bash kontynuuje działanie. Świetny.
O tak ... Czasami „druga aplikacja” to kolejny skrypt Bash. I w takim przypadku Ctrl+ Cteraz nic nie robi .
Najwyraźniej moje rozumienie tego, jak to działa, jest błędne ... Jak kontrolować, który proces otrzymuje SIGINT, gdy użytkownik naciśnie Ctrl+ C? Chcę skierować ten sygnał tylko na jeden konkretny proces .
set -m
. Jest to trochę czystsze i prostsze niż używanie zasetsid
każdym razem, gdy prowadzisz dziecko.