Можно ли установить определяемое пользователем свойство «уничтожить после» для моментального снимка ZFS?

Нажатие Ctrl + C в терминале отправляет сигнал SIGINT процессу, запущенному в терминале. (Точнее, для всех процессов в группе процессов переднего плана; например, если вы запускаете foo | tail -f , то сигнал отправляется как на foo , так и на tail .)

Традиционное значение SIGINT (INTerrupt signal) - «прервать текущую задачу и вернуться к интерактивной подсказке». Программы, у которых нет интерактивной подсказки, такой как tail, просто закрываются, чтобы командная оболочка взяла на себя управление.

Команда trap определяет поведение оболочки при получении сигнала. Например, trap 'echo kill' INT заставляет оболочку print убивать , когда она получает сигнал SIGINT. trap 'echo kill' 2 то же самое на ПК с Linux, потому что 2 - это номер сигнала с именем INT. Это срабатывает только в том случае, если оболочка получает сигнал, она не запускается, если другая программа находится на переднем плане.

trap "" INT - особый случай. Он не просто приказывает оболочке ничего не делать, когда она получает сигнал, она приказывает оболочке игнорировать сигнал. Когда процесс регистрирует обработчик сигнала, это не влияет на запускаемые им программы - обработчик - это код в процессе, и не будет возможности вызвать его из другой программы. Но игнорирование сигнала - это другая настройка, и она сохраняется, когда программа запускает другую программу.Итак, после trap "" INT , когда вы запускаете tail , сигнал по-прежнему игнорируется, и нажатие Ctrl + C не имеет никакого эффекта .

Если вы хотите по-прежнему эффективно игнорировать сигналы в оболочке, но не в программах, которые она запускает, установите непустую ловушку, например trap "" INT или trap: INT (: - это команда оболочки без операций). В качестве альтернативы, запустите trap - INT перед запуском tail , чтобы сбросить обработку сигналов до состояния по умолчанию, не игнорируемого.

4
07.01.2018, 20:00
0 ответов

Теги

Похожие вопросы