Откуда процесс bash берет обработчики сигналов/ловушки по умолчанию?

Откуда процесс bash берет обработчики сигналов/ловушки по умолчанию?

От https://stackoverflow.com/questions/50606753/do-getrlimit-and-setrlimit-work-by-reading-from-and-writing-to-etc-sec#comment88227414_50607042

Bash не имеет специального обработчика для SIGQUIT и не участвует в процессе создания дампа ядра. Ядро записывает дамп ядра как часть "действия по умолчанию" для SIGQUIT, если и только если rlimit для дампов ядра достаточно большой; этот rlimit мог быть установлен при входе в систему в соответствии с тем, что он говорит в limits.conf, или он мог быть скорректирован вручную с помощью ulimit или чего-то еще.

Я не совсем понимаю, что «в Bash нет специального обработчика для SIGQUIT».

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

Откуда процесс bash берет обработчики сигналов/ловушки по умолчанию?

В APUE я не могу найти, является ли login(или gettyкакая-то другая программа в последовательности запуска) первой программой, которая устанавливает обработчики сигналов по умолчанию (а также ограничения ресурсов из /etc/security/limits.conf, что является центральной темой по ссылке) и передает их в оболочку входа:

Если мы правильно войдём в систему, вход будет

• Перейдите в наш домашний каталог (chdir)

• Измените владельца нашего терминального устройства (chown), чтобы мы стали его владельцами.

• Измените права доступа к нашему терминальному устройству, чтобы у нас было разрешение на чтение и запись на него.

• Установите идентификаторы наших групп, вызвав setgid и initgroups

• Инициализируйте среду со всей информацией, которая есть у входа: наш домашний каталог (HOME), оболочка (SHELL), имя пользователя (USER и LOGNAME) и путь по умолчанию (PATH)

• Измените наш идентификатор пользователя (setuid) и вызовите нашу оболочку входа, как в

execl("/bin/sh", "-sh", (char *)0);

Связанный контент