Я был удивлен этим комментарием в другом вопросе:
Отправка dd сигнала USR1 слишком скоро после его запуска (т.е. в bash-скрипте, строка после того, как вы его запустили) фактически прервет его
Кто-нибудь может объяснить, почему ?
Я был удивлен этим комментарием в другом вопросе:
Отправка dd сигнала USR1 слишком скоро после его запуска (т.е. в bash-скрипте, строка после того, как вы его запустили) фактически прервет его
Кто-нибудь может объяснить, почему ?
Ответы:
Каждый сигнал имеет «расположение по умолчанию» - что процесс делает по умолчанию, когда получает этот сигнал. На 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
и SIGUSR2
оба имеют действие по умолчанию Term
- процесс прекращается. dd
регистрирует обработчик для перехвата сигнала и делает с ним что-то полезное, но если вы подаете сигнал слишком быстро, у него еще не было времени зарегистрировать этот обработчик, поэтому вместо этого происходит действие по умолчанию
strace
выходных данных в сценарии оболочки…)
{ dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobs
воспроизвести эффект, который вы описываете.