Intereting Posts
как объединить файл с несколькими заголовками в один Как найти, к чему относятся ссылки driver.mod.c? С точки зрения безопасности я должен добавить своего пользователя в файл sudoers или нет? Создание серверных и клиентских сертификатов с несколькими именами хостов Что произойдет, если скрипт cron попытается скопировать каталог одновременно с записью другого процесса? Почему сервер Xnest имеет другой glxinfo, чем обычный сервер Xorg? Почему мой sudo запрашивает пароль только один раз, но оценивает трижды? Как получить IP-адреса через DHCP через маршрутизатор с другого DHCP-сервера? Назначение переменной в сценарии ksh В awesome window manager, как я могу привязать ключевые привязки к событиям клавиатуры? Несоответствия между перенаправлением ввода из файла, здесь docs и здесь строки Как восстановить зашифрованный жесткий диск LUKS? Как получить доступ к терминалам agetty (например, TTY2, 3, 4 и т. Д.) Из виртуальной машины QEMU Как я могу переключаться между Python 2.7 и 3.4, установленными на Debian 8 (Jessie)? Проводя результат ls в хвост

Вызывает ли bash `execve ()` без внесения дополнительных изменений в то, как execve () обрабатывает расположение сигналов?

Bash руководство говорит

Когда нужно выполнить простую команду, отличную от встроенной функции или функции оболочки, … ловушки, перехваченные оболочкой, сбрасываются на значения, унаследованные от родительской оболочки , а ловушки, игнорируемые оболочкой, игнорируются

man-страница execve () говорит

Во время execve (2) расположение обработанных сигналов сбрасывается до значения по умолчанию ; расположение игнорируемых сигналов остается без изменений “.

Являются ли «значения по умолчанию» и «значения, унаследованные от родителя оболочки», одинаковыми?

Вызывает ли bash execve() не внося дополнительных изменений в то, как execve() обрабатывает расположение сигналов?

Благодарю.

Нет, «значения по умолчанию» и «значения, унаследованные от родителя оболочки», не совпадают. В случае execve, «по умолчанию» относится к SIG_DFL , который вызывает действие по умолчанию, как указано в man 7 signal . В случае bash «значения, унаследованные от родителя оболочки», означают именно то, что написано; если такой сигнал был проигнорирован ( SIG_IGN ) его родителем, он будет проигнорирован и в его потомке.

Ключом к пониманию того, что здесь происходит, является слово «обработано». Это относится к пользовательской функции обработчика сигнала, отличной от SIG_DFL или SIG_IGN . Он должен быть сброшен execve, так как новый процесс не будет иметь функции обработчика сигналов, которую использовал старый процесс.

Обратите внимание, что более новые версии man-страницы execve ссылаются на «обработанные» сигналы как «пойманные» сигналы, чтобы соответствовать терминологии, используемой в остальной части Linux. Это по-прежнему отличается от сигналов по умолчанию и игнорируемых сигналов.

Простая версия: если родитель bash или bash имеет сигнал, помеченный как SIG_IGN , это будет SIG_IGN в новом дочернем элементе. В противном случае это будет SIG_DFL в новом дочернем SIG_DFL . Он никогда не может быть обработчиком в новом дочернем элементе, поскольку в новом дочернем элементе не будет никакого обработчика из bash или его родителя.