Книга: Разработка приложений в среде Linux. Второе издание
10.4.6. Уничтожение других процессов
10.4.6. Уничтожение других процессов
Разрушение другого процесса почти столь же просто, как создание нового — нужно просто уничтожить его:
int kill(pid_t pid, int signum);
должен быть идентификатором процесса, который требуется уничтожить, а
pidsignum
описывает, как это нужно сделать. Доступны два варианта выполнения операции[25] прерывания дочернего процесса. Вы можете применить SIGTERM
, чтобы прервать его "вежливо". Это означает, что процесс при этом может сообщить ядру о том, что кто-то пытается его уничтожить; в результате появляется возможность завершить его корректно (сохранив файлы, например). Процесс может в этом случае игнорировать запрос на прерывание такого типа и продолжать выполняться. Применение значения SIGKILL
в качестве параметра signum
вызывает немедленное прерывание процесса без каких-либо вопросов. Если signum
равно 0
, то kill()
проверяет, имеет ли тот процесс, что вызвал kill()
, соответствующие полномочия, возвращает ноль, если это так, либо ненулевое значение, если полномочий недостаточно. Это обеспечивает процессу возможность проверки корректности pid
.
Параметр pid
в среде Linux может принимать перечисленные ниже значения.
pid > 0 |
Сигнал отправляется процессу с идентификатором pid . Если такого процесса нет, возвращается ESRCH . |
pid < -1 |
Сигнал посылается всем процессам, принадлежащим группе с pgid, равным -pid . Например, kill(-5316, SIGKILL) немедленно прерывает все процессы из группы 5316. Такая возможность используется оболочками управления заданиями, как описано в главе 15. |
pid = 0 |
Сигнал отправляется всем процессам группы, к которой относится текущий процесс. |
pid = -1 |
Сигнал посылается всем процессам системы за исключением инициализирующего процесса (init). Это применяется для полного завершения системы. |
Процессы могут нормально уничтожать вызовом kill()
только те процессы, которые разделяют тот же эффективный идентификатор пользователя, что и у них самих. Существуют два исключения из этого правила. Во-первых, процессы с эффективным uid, равным 0, могут уничтожать любые процессы в системе. Во-вторых, любой процесс может посылать сигнал SIGCONT
любому процессу в том же сеансе[26].
- 10.4.4. Ускоренное создание процессов с помощью vfork()
- 10.4. Примитивы процессов
- 10.4.1. Создание дочерних процессов
- 10.4.2. Наблюдение за уничтожением дочерних процессов
- 10.4.5. Уничтожение процессом самого себя
- Уничтожение полученного маршрута от отправителя
- Глава 7 Чего нужно опасаться при моделировании бизнес-процессов. Проектные риски моделирования бизнеспроцессов
- Эффективное взаимодействие процессов архитектуры Classic Server
- 1.2. Понятие информации. Общая характеристика процессов сбора, передачи, обработки и накопления информации
- Вот уже в который раз при работе в сети появляется сообщение от других пользователей. Что это может быть?
- 3.4.2. Остановка процессов
- 3.4.3. Просмотр процессов