Книга: Linux программирование в примерах
9.1.4.4. Атрибуты, наследуемые exec()
9.1.4.4. Атрибуты, наследуемые exec()
Как и в случае с fork()
, после вызова программой exec
сохраняется ряд атрибутов:
• Все открытые файлы и открытые каталоги; см. раздел 4.4.1 «Понятие о дескрипторах файлов» и раздел 3.3.1 «Базовое чтение каталогов». (Сюда не входят файлы, помеченные для закрытия при исполнении (close-on-exec), как описано далее в этой главе; см. раздел 9.4.3.1 «Флаг close-on-exec».)
• Установки umask; см. раздел 4.6 «Создание файлов».
• Текущий рабочий каталог, см. раздел 8.4.1 «Изменение каталога: chdir()
и fchdir()
»
• Корневой каталог; см. раздел 8.6 «Изменение корневого каталога: chroot()
».
• Текущее значение относительного приоритета.
• ID процесса и ID родительского процесса.
• ID группы процесса и контролирующий терминал; см. раздел 9.2.1 «Обзор управления работами».
• Маску сигналов процесса и любые ожидающие сигналы, а также любые не истекшие аварийные сигналы или таймеры (здесь не обсуждается; см. главу 10 «Сигналы»).
• Действительные ID пользователя и ID группы, а также дополнительный набор групп. Эффективные ID пользователя и группы (а следовательно, и сохраненные ID set-user и set-group) могут быть установлены с помощью битов setuid и setgid исполняемого файла. (Ничто из этого пока не обсуждалось; см. главу 11 «Права доступа и ID пользователя и группы».)
• Блокировки файлов сохраняются (также пока не обсуждалось; см. раздел 14.2 «Блокировка файлов»).
• Суммарное использованное время процессора для процесса и его потомков не меняется.
После exec
размещение сигналов изменяется; дополнительные сведения см. в разделе 10.9 «Сигналы для fork()
и exec()
».
После exec
все открытые файлы и каталоги остаются открытыми и доступными для использования. Вот как программы наследуют стандартные ввод, вывод и ошибку: они на месте, когда программа запускается.
В большинстве случаев при исполнении fork
и exec
для отдельной программы не нужно ничего наследовать, кроме дескрипторов файлов 0, 1 и 2. В этом случае можно вручную закрыть все другие открытые файлы в порожденном процессе после выполнения fork
и до выполнения exec
. В качестве альтернативы можно пометить дескриптор файла для автоматического закрытия системой при исполнении exec; эта последняя возможность обсуждается далее в главе (см раздел 9.4.3.1 «Флаг close-on-exec».)
- 9.1.4. Запуск новой программы: семейство exec()
- Атрибуты
- 15.4. Атрибуты
- 1.3.5. Методы и атрибуты
- 2. Домены и атрибуты
- 4. Виртуальные атрибуты
- 9.1.4.2. Функции-оболочки: execl() и др.
- 2.3 Executable and Linking Format
- У файла и каталога есть атрибуты (например: Скрытый, Только чтение). Как ими управлять из командной строки?
- 9.4.3.1. Флаг close-on-exec
- Семейство функций exec()
- 20.2.1. Атрибуты cookie: срок хранения и область видимости