KILL(2)

명칭
kill - 프로세스에 시그널을 송신한다

프로그램 라이브러리
libc

서식
<sys/types.h> <signal.h> int kill(pid_t pid, int sig)

해설
kill() 함수는, sig 에 의해 지정된 시그널을 프로세스 또는 프로세스의 그룹이다 pid 에 송신합니다. sig (은)는, sigaction(2) 그리고 규정된 시그널의 1 개로 할 수도 있고, 0 으로 할 수도 있습니다. 0 의 경우는, 에러 체크를 실행합니다만, 실제로 시그널은 송신되지 않습니다. 이것을 사용해 pid 의 유효성을 체크 할 수 있습니다.

프로세스가 pid 에 의해 지정된 프로세스에 시그널을 송신하는 퍼미션을 가지기 위해서(때문에)는, 수신하는 프로세스의 열매 유저 ID 또는 실효 유저 ID 가 송신 프로세스의 대응하는 것과 일치하는지, 또는 유저는 해당하는 특권을 가지고 있다 (set-user-ID 로 주어진 특권, 또는 유저가 슈퍼 유저일) 필요가 있습니다. 유일한 예외는 시그널 SIGCONT 로, 이것만은 현재의 프로세스의 자손에게 반드시 송신할 수 있습니다.

pid 가 0 보다 큰 경우:
    sig (은)는 ID 가 pid 에 동일한 프로세스에 송신됩니다.

pid 가 0 의 경우:
    sig (은)는 그룹 ID 가 송신측의 프로세스 그룹 ID 와 동일하고, 거기에 붙어 프로세스가 퍼미션을 가지고 있는 모든 프로세스에 송신됩니다. 이것은 killpg(2) 의 변종입니다.

pid 가 -1 의 경우:
    유저에게 슈퍼 유저의 특권이 있는 경우, 시스템 프로세스 (P_SYSTEM 플래그가 설정되어 있다), ID 가 1 의 프로세스 (통상은 init(8) ), 및 시그널을 송신하고 있는 프로세스를 제외한 모든 프로세스에 시그널이 송신됩니다. 유저가 슈퍼 유저가 아닌 경우, 시그널을 송신하고 있는 프로세스를 제외한, 유저와 같은 uid 의 모든 프로세스에 시그널이 송신됩니다. 몇개의 프로세스에 시그널을 송신할 수 있었을 경우, 에러는 돌려주어지지 않습니다.

System V 와의 호환성을 유지하기 위해서(때문에), 프로세스 번호가 -1 이외의 음수의 경우, 프로세스 번호의 절대치에 동일한 프로세스 그룹 ID 를 가진다 모든 프로세스에 시그널이 송신됩니다. 이것은 killpg(2) 의 변종입니다.

반환값

에러
Kill() (은)는 다음의 경우에 처리에 실패해, 시그널은 송신되지 않습니다.

[EINVAL]
    sig 하지만 유효한 시그널 번호가 아닙니다.

[ESRCH]
    pid 그리고 지정된 프로세스에 대응하는 프로세스를 검출할 수 없습니다.

[ESRCH]
    프로세스 ID 는 0 으로서 주어졌지만, 송신 프로세스에 프로세스 그룹이 없습니다.

[EPERM]
    송신 프로세스는 슈퍼 유저가 아니고, 그 실효 유저 ID 가 수신 프로세스의 실효 유저 ID 와 일치하지 않습니다. 프로세스 그룹에 시그널을 송신할 때, 그룹의 멤버의 어느 쪽인가에 시그널 (을)를 송신할 수가 없는 경우, 이 에러가 돌려주어집니다.

관련 항목
getpgrp(2), getpid(2), killpg(2), sigaction(2), raise(3), init(8)

표준
kill() 함수는 p1003.1-90 에 준거하고 있습니다.

역사
kill() 함수는 AT&T UNIX 그리고 처음 등장했습니다.