Первый сигнал - SIGHUP;он отправляется всем процессам в группе процессов, когда терминал отключается (зависает - значит, HUP).
Второй сигнал - SIGCONT (спасибо, SiegeX, за цифры).Это немного удивительно;это говорит о том, что вы остановили задание в фоновом режиме, которое нужно было запустить снова.
Третий сигнал - это еще один SIGHUP.Скорее всего, это было отправлено, чтобы убедиться, что продолжение процесса завершено, но оно было отправлено всей группе процессов.(См. Стандарт POSIX для получения информации о группах процессов и т. Д.).
Четвертый сигнал - это SIGCHLD, указывающий, что дочерний процесс умер и труп доступен (ну, статусдоступен.)
Последний сигнал, 0, является внутренним псевдосигналом оболочки, указывающим, что он выходит.
Вы можете сделать:
trap 'echo Bye' 0
, чтобы повторить«Пока», когда оболочка выходит из-под контроля по любой причине.Вы выбрали отображение сигнала в файл вместо этого.Поскольку оболочка выходит в этот момент, это последнее сигнальное сообщение, которое видно.Его родительский процесс должен получить сигнал SIGCHLD, потому что оболочка умерла.
FWIW, на MacOS X 10.6.7 я выполнил ваш тест.В MacOS X отсутствует сигнал 32, и некоторые сопоставления отличаются, и последовательность отправленных сигналов также отличается:
$ i=-1;while((++i<33));
> do
> trap "echo $i >> log.txt" $i;
> done
-sh: trap: 32: invalid signal specification
$ trap
trap -- 'echo 0 >> log.txt' EXIT
trap -- 'echo 1 >> log.txt' HUP
trap -- 'echo 2 >> log.txt' INT
trap -- 'echo 3 >> log.txt' QUIT
trap -- 'echo 4 >> log.txt' ILL
trap -- 'echo 5 >> log.txt' TRAP
trap -- 'echo 6 >> log.txt' ABRT
trap -- 'echo 7 >> log.txt' EMT
trap -- 'echo 8 >> log.txt' FPE
trap -- 'echo 9 >> log.txt' KILL
trap -- 'echo 10 >> log.txt' BUS
trap -- 'echo 11 >> log.txt' SEGV
trap -- 'echo 12 >> log.txt' SYS
trap -- 'echo 13 >> log.txt' PIPE
trap -- 'echo 14 >> log.txt' ALRM
trap -- 'echo 15 >> log.txt' TERM
trap -- 'echo 16 >> log.txt' URG
trap -- 'echo 17 >> log.txt' STOP
trap -- 'echo 19 >> log.txt' CONT
trap -- 'echo 20 >> log.txt' CHLD
trap -- 'echo 23 >> log.txt' IO
trap -- 'echo 24 >> log.txt' XCPU
trap -- 'echo 25 >> log.txt' XFSZ
trap -- 'echo 26 >> log.txt' VTALRM
trap -- 'echo 27 >> log.txt' PROF
trap -- 'echo 28 >> log.txt' WINCH
trap -- 'echo 29 >> log.txt' INFO
trap -- 'echo 30 >> log.txt' USR1
trap -- 'echo 31 >> log.txt' USR2
$
Сигналы, полученные за один прогон:
2
1
20
0
Во втором прогоне я получил:
20
1
20
0
Сначала SIGINT удивляет - я не думаю, что смогу объяснить это, если это просто не означает какую-то неполную запись (должен был прочитать 20, но SIGHUP вызвал проблему).Я не уверен, что могу объяснить сигналы SIGCHLD;ловушка SIGHUP и 'exit' такие же, как и раньше.
В некоторой степени, однако, сигналы зависят от конкретной системы - или так кажется.Тем не менее, SIGHUP является обычным и постоянным.