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