Мене здивував цей коментар в іншому запитанні:
Надсилання сигналу 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відтворити описаний вами ефект.