Мене здивував цей коментар в іншому запитанні:
Надсилання сигналу USR1 dd занадто рано після його запуску (тобто у баш-скрипті, рядок після його запуску) фактично припинить його
Хтось може пояснити, чому ?
Мене здивував цей коментар в іншому запитанні:
Надсилання сигналу USR1 dd занадто рано після його запуску (тобто у баш-скрипті, рядок після його запуску) фактично припинить його
Хтось може пояснити, чому ?
Відповіді:
Кожен сигнал має "диспозицію за замовчуванням" - що робить процес за замовчуванням, коли він отримує цей сигнал. На 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
відтворити описаний вами ефект.