Byłem zaskoczony tym komentarzem w innym pytaniu:
Wysłanie dd sygnału USR1 zbyt wcześnie po jego uruchomieniu (tj. W skrypcie bash, wiersz po uruchomieniu) faktycznie go zakończy
Czy ktoś może wyjaśnić, dlaczego ?
Byłem zaskoczony tym komentarzem w innym pytaniu:
Wysłanie dd sygnału USR1 zbyt wcześnie po jego uruchomieniu (tj. W skrypcie bash, wiersz po uruchomieniu) faktycznie go zakończy
Czy ktoś może wyjaśnić, dlaczego ?
{ dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobs
aby odtworzyć opisywany efekt.Odpowiedzi:
Każdy sygnał ma „domyślne ustawienie” - co domyślnie robi proces, gdy odbiera ten sygnał. Na stronie podręcznika znajduje się tabela
signal(7)
:SIGUSR1
iSIGUSR2
oba mają domyślną akcjęTerm
- proces zostaje zakończony.dd
rejestruje moduł obsługi, który przechwytuje sygnał i robi z nim coś pożytecznego, ale jeśli zbyt szybko zasygnalizujesz, nie ma czasu na zarejestrowanie tego modułu obsługi, więc zamiast tego dzieje się domyślne działanieźródło
strace
wyników w skrypcie powłoki…)