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

vmware-tools нужны полные заголовки ядра.

вероятно, make headers_install не экспортирует все, что нужно vmware. попробуйте скопировать реальный исходный код ядра и протестируйте. если он работает, удалите все файлы, кроме .h

find /tmp/headers-full -not -name \*.h -delete

, и повторите попытку. если это сработает, сравните оба дерева заголовков, чтобы увидеть, что отсутствует

1
30.05.2018, 21:22
1 ответ

Нет, «значение по умолчанию» и «значения, унаследованные от родителя оболочки» — это не одно и то же. В случае 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.Он никогда не может быть обработчиком в новом дочернем элементе, поскольку в новом дочернем элементе не будет обработчика из bash или его родителя.

2
27.01.2020, 23:32

Теги

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