
- •1.4 Структура операционных систем
- •1.4.1 Монолитная система
- •1.4.2 Многоуровневая структура ос
- •1.4.3 Модель экзоядра
- •1.4.4 Микроядерная архитектура (модель клиент-сервер)
- •1.4.5 Обобщение сравнения моделей
- •Интерфейс пользователя
- •Команды
- •Командная строка
- •Договоренности о формате командной строки
- •C.5.4. Переназначение потоков.
- •C.5.5. Переназначение стандартного потока ошибок (в unix).
- •C.5.6. Перенаправление потока ввода.
- •C.5.7. Конвейерная обработка.
- •Управление потоком выполнения
- • Стандартный ввод/вывод
- •Диагностика и другие виды вывода
- •Командные строки и конвейеры
- •Специальные символы
- •8.2.1. Запуск команды в фоновом режиме (символ &)
- •8.2.2. Последовательное выполнение команд (символ ;)
- •8.2.4. Отмена специального значения (метасимвол кавычки)
- •8.2.4.1. Использование кавычек для отмены значения символа пробел
- •Использование кавычек
- •Окружение
- •Переменная окружения
- •Взаимодействие процессов посредством окружения
- •Переменные Shell
- •Позиционные параметры
- •Файловая система
- •Структура файловой системы
- •Монтируемые файловые системы
- •Интерфейс с файловой системой
- •Разновидности файлов
- •Обычные файлы
- •Файлы-каталоги
- •Специальные файлы
- •Связывание файлов с разными именами
- •Именованные программные каналы
- •Файлы, отображаемые в виртуальную память
- •Синхронизация при параллельном доступе к файлам
- •Процессы
- •Процессы
- •Атрибуты процесса
- •Идентификатор процесса (pid)
- •Идентификатор родительского процесса (ppid)
- •Поправка приоритета (ni)
- •Терминальная линия (tty)
- •Реальный (uid) и эффективный (euid) идентификаторы пользователя
- •Реальный (gid) и эффективный (egid) идентификаторы группы
- •Атрибуты файлов
- •Порождение процессов в Linux
- •Управление процессами
- •Типы процессов
- •Права доступа к файлам и каталогам
- •Жизненный цикл процесса в unix и основные системные вызовы
- •Контекст процесса
- •Приоритеты процессов
- •Создание процесса
- •Сон и пробуждение
- •Завершение выполнения процесса
- •Получение информации о процессах
- •Управление приоритетом процессов
- •Сигналы: посылка и обработка
- •Доставка и обработка сигнала
- •Основные сигналы
- •Посылка сигналов
- •Сигналы, посылка сигналов, команда kill
- •Приоритет выполнения процесса, команда nice
- •Текущий контроль процессов, команды ps и top
- •Защита фоновых процессов, команда nohup
- •Пользователь
- •. Привилегированный пользователь
- •Управление пользователями и правами доступа База данных пользователей системы
- •Изменение базы данных пользователей
- •Изменение прав доступа
- •Ограничения сеанса пользователя
- •Команды архивирования файлов
- •4.7.1. Программа tar
- •4.7.2. Программа gzip
- •4.7.3. Программа bzip2
- •Команды поиска grep и find
- •5.5. Перенаправление ввода/вывода, каналы и фильтры
- •5.5.2 Оператор |
- •5.5.3 Фильтры
- •Сигналы
- •Приложение. Список реентерабельных функций
- •Регистрация системных сообщений, система syslog
- •Конфигурационный файл демона syslogd
- •Info Информационные сообщения
- •Учет продолжительности соединений
- •Пользователи и группы
- •Файл /etc/passwd
- •Файл /etc/group
- •Файл /etc/shadow
- •Системные регистрационные имена
- •Изменение действующего идентификатора пользователя
- •Изменение действующего идентификатора группы
- •Изменение пароля и характеристик учетной записи, связанных с регистрацией
- •Правила построения паролей
- •Действие команды passwd
- •Устаревание паролей
- •Показ атрибутов пароля
- •Стандартные значения атрибутов
- •Просмотр базы данных учетных записей
- •Получение списка зарегистрировавшихся пользователей
- •Средства создания, изменения и удаления учетных записей пользователей
- •Средства создания, изменения и удаления групп
Создание процесса
Новый процесс создается в UNIX только путем системного вызова fork. Процесс, сделавший вызов fork, называется родительским, а вновь созданный процесс - порожденным. Новый процесс является точной копией родительского. При порождении (разветвлении) процесса проверяется, достаточно ли памяти и места в таблице процессов для данного процесса. Если да, то образ текущего процесса копируется в новый образ процесса, и в таблице процессов возникает новый элемент. Новому процессу присваивается новый уникальный идентификатор (PID). Когда изменение таблицы процессов ядра завершается, процесс добавляется к списку процессов, доступных для выполнения и ожидающих в очереди планировщика подобно другим процессам.
Порожденный процесс наследует от родительского процесса следующие основные характеристики:
Способы обработки сигналов (адреса функций обработки сигналов).
Реальные и эффективные идентификаторы пользователя и группы.
Значение поправки приоритета.
Все присоединенные разделяемые сегменты памяти.
Идентификатор группы процессов.
Терминальную линию.
Текущий каталог.
Корневой каталог.
Маска создания файлов (umask).
Ограничения ресурсов (ulimit).
Порожденный процесс отличается от родительского процесса следующими основными характеристиками:
Порожденный процесс имеет свой уникальный идентификатор.
Порожденный процесс имеет другой идентификатор родительского процесса, равный идентификатору породившего процесса.
Порожденный процесс имеет свои собственные копии дескрипторов файлов (в частности, стандартных потоков), открытых родительским процессом. Каждый дескриптор файла порожденного процесса имеет первоначально такое же значение текущей позиции в файле, что и соответствующий родительский.
У порожденного процесса обнуляются счетчики времени, потраченного системой для его обслуживания.
Системный вызов fork завершается неудачей и новый процесс не порождается, если:
Создать процесс запрещает системное ограничение на общее количество процессов.
Создать процесс запрещает системное ограничение на количество процессов у одного пользователя.
Общее количество системной памяти, предоставленной для физического ввода-вывода, временно оказалось недостаточным.
При успешном завершении порожденному процессу возвращается значение 0, а родительскому процессу возвращается идентификатор порожденного процесса. В случае ошибки родительскому процессу возвращается -1, новый процесс не создается и переменной errno присваивается код ошибки.
Обычно после порождения порожденный процесс выполняет системный вызов exec, перекрывающий сегменты текста и данных процесса новыми сегментами текста и данных, взятыми из указанного выполняемого файла. При этом аппаратный контекст процесса инициализируется заново.
Выполняемый файл состоит из заголовка, сегмента команд и сегмента данных. Данные (глобальные переменные) состоят из инициализированной и неинициализированной частей.
Если системный вызов exec закончился успешно, то он не может вернуть управление, так как вызвавший процесс уже заменен новым процессом. Возврат из системного вызова exec свидетельствует об ошибке. В таком случае результат равен -1, а переменной errno присваивается код ошибки.
Новый процесс наследует у процесса, вызвавшего exec, следующие основные характеристики:
Значение поправки приоритета.
Идентификатор процесса.
Идентификатор родительского процесса.
Идентификатор группы процессов.
Терминальную линию.
Текущий каталог.
Корневой каталог.
Маску создания файлов.
Ограничения ресурсов.
Счетчики времени, потраченного системой на обслуживание этого процесса.
Блокировки доступа к сегментам файлов.