Erstellt von Sergei Fomin
vor fast 9 Jahre
|
||
Frage | Antworten |
Системный вызов fork() | Порождает дочерний процесс. Родителю возвращает pid ребёнка, ребёнку возвращает 0. |
Механизм "copy on write" | Родственные процессы делят физические сегменты памяти до тех пор, пока какой-то процесс не захочет изменить свой участок памяти - только тогда он копирается физически |
Системный вызов exec() | Заменяет образ процесса на другой процесс, загруженный с жёсткого диска |
Переменные окружения | Набор пар "ключ=значение" |
Основные атрибуты процесса | Идентификатор процесса, идентификатор родительского процесса, переменные окружения, идентификаторы пользователя и группы (реальные и эффективные), рабочий каталог, корневой каталог, приоритет |
Самые часто используемые сигналы | SIGSEGV, SIGFPE, SIGPIPE, SIGABRT, SIGTERM, SIGINT, SIGKILL, SIGCHLD, SIGALARM |
Особенности сигналов ANSI | После обработки сигнала обработчик автоматически сбрасывается в default. В момент обработки сигналы не блокируются. Прерывают системные вызовы, и те возвращают ошибку. Устарели. |
Маска сигналов (POSIX) | Позволяет временно блокировать определённые сигналы. Установленный бит в маске означает блокирование. |
Основные флаги сигналов POSIX | SA_NODEFER - отменить самоблокирование сигнала во время обработки; SA_RESTARTHAND - сбрасывать обработчик после каждого срабатывания; SA_RESTART - не прерывать исполнение системных вызвов; SA_SIGINFO - сигнал реального времени |
Сигналы реального времени | В отличие от простых сигналов: - Не "склеиваются", а становятся в очередь; - Поддерживают приоритеты; - Несут дополнительную информацию (кем послан, пользовательскую инфу). |
Системный вызов pause() | Процесс впадает в спячку до получения следующего сигнала |
Процессы-зомби | Процессы, завершившие выполнение и освободившие все ресурсы, кроме pid. Происходит, если родитель не проверил код возврата дочернего процесса. Избегается с помощью waitpid() или сигнала SIGCHLD |
Типы блокировок ресурсов | LOCK_EX - только 1 процесс владает ресурсом LOCK_SH - ресурс разделяется Первую обычно ставят на запись, вторую на чтение. |
Блокировка по файлу (file lock) | Если файла не существует, ресурс свободен; Если файл существует - занят. |
Типы каналов | fifo - именованный канал pipe - анонимный канал |
Как pipe используется для перенаправления стандартного I/O? | dup2(int oldfd, int newfd) Закрываем stdin, делаем dup2(pipe, stdin) Тоже самое для stdout |
popen | Запуск команды и получение дескриптора на чтение или запись в его stdin или stdout. Ограничение: либо чтение, либо запись, что-то одно. |
Способы распределение нагрузки на процессоры | 1) Сделать много fork() 2) Master process и worker proccesses; Во втором случае можно передавать рабочему не данные клиентские, а дескриптор для чтения этих данных. |
Möchten Sie mit GoConqr kostenlos Ihre eigenen Karteikarten erstellen? Mehr erfahren.