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 ?
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)
:
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
...
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGUSR1
i SIGUSR2
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
strace
wyników w skrypcie powłoki…)
{ dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobs
aby odtworzyć opisywany efekt.