ИМЯ¶
kill - посылает
сигнал
процессу
ОБЗОР¶
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
ОПИСАНИЕ¶
Системный
вызов
kill
может быть
использован
для посылки
какого-либо
сигнала
какому-либо
процессу или
группе
процесса.
Если
значение
pid
является
положительным,
сигнал
sig
посылается
процессу с
идентификатором
pid.
Если
pid равен 0,
то
sig
посылается
каждому
процессу,
который
входит в
группу
текущего
процесса.
Если
pid равен -1,
то
sig
посылается
каждому
процессу, за
исключением
процесса с
номером 1 (init), но
есть нюансы,
которые
описываются
ниже.
Если
pid
меньше чем -1,
то
sig
посылается
каждому
процессу,
который
входит в
группу
процесса
-pid.
Если
sig равен 0,
то никакой
сигнал не
посылается,
а только
выполняется
проверка на
ошибку.
ВОЗВРАЩАЕМОЕ
ЗНАЧЕНИЕ¶
В случае
успеха,
возвращается
ноль. При
ошибке,
возвращается
-1 и значение
errno
устанавливается
соответствующим
образом.
ОШИБКИ¶
- EINVAL
- Задан
неправильный
сигнал.
- ESRCH
- Идентификатор
процесса pid
или группа
процесса не
существуют.
Заметим, что
существующий
процесс
может быть
зомби -
процессом,
который уже
находится в
состоянии
завершения,
но пока в
котором
пока ещё не
выполнился
wait().
- EPERM
- Текущий
процесс не
имеет прав
на посылку
сигнала к
любому из
указанных
процессов.
Процессы,
которые
имеют права
на посылку
сигнала
процессу с
номером pid
должны
иметь
привелегии
суперпользователя
или,
реальный
или
эффективный
идентификатор
пользователя
процесса,
посылающего
сигнал,
должен быть
таким же как
реальный
или
эффективный
идентификатор
пользователя
процесса,
принимающего
сигнал. В
случае,
когда
посылающий
и
принимающий
процессы
относятся к
одной
сессии,
становится
доступным
сигнал SIGCONT.
ЗАМЕЧАНИЯ¶
Невозможно
послать
сигнал
процессу с
номером 1, т.е.
процессу init,
для которого
не
устанавливается
обработчик
сигналов.
Так сделано,
чтобы быть
уверенным,
что в случае
какой-либо
нештатной
ситуации,
рабата
системы не
будет
завершена
аварийно.
POSIX 1003.1-2001 требует,
чтобы
kill(-1,sig)
посылал
sig
всем
процессам,
которым
текущий
процесс
может
послать
сигналы, за
исключением
возможно
нескольких,
определяемых
реализацией
системы
процессов. Linux
разрешает
любому
процессу
посылать
сигнал себе,
но в Linux
системный
вызов
kill(-1,sig) не
посылает
сигнал
текущему
процессу.
ИСТОРИЯ LINUX¶
В различных
версиях
ядра, Linux
применяет
разные
правила,
касающиеся
прав
доступа,
которые
требуются
для
непревилегированного
процесса,
чтобы
посылать
сигнал
другому
процессу. В
ядрах с 1.0 по 1.2.2,
сигнал может
быть послан,
если
эффективный
идентификатор
пользователя,
посылающего
сигнал
процесса
совпадает с
эффективным
идентифкатором
пользователя
у
процесса-получателя
или реальный
идентификатор
пользователя,
посылающего
сигнал
процесса
совпадает с
реальным
идентифкатором
пользователя
у
процесса-получателя.
В ядрах с 1.2.3 по
1.3.77, сигнал
может быть
послан, если
эффективный
идентификатор
пользвателя,
посылающего
сигнал
процесса
совпадает
или с
реальным или
с
эффективным
идентифкатором
пользователя
у
процесса-получателя.
Текущие
правила,
которые
соответствуют
стандартам POSIX
1003.1-2001 были
введены,
начиная с
ядра версии
1.3.78.
СООТВЕТСТВИЕ
СТАНДАРТАМ¶
SVr4, SVID, POSIX.1, X/OPEN, BSD 4.3, POSIX 1003.1-2001
СМОТРИ
ТАКЖЕ¶
_exit(2),
killpg(2),
signal(2),
tkill(2),
exit(3),
signal(7)
ПЕРЕВОД¶
Перевёл с
английского
Виктор
Вислобоков
<corochoone@perm.ru> 2004