C함수 kill 시그널 전송 kill()
kill() 함수는 쉘에서 프로세스를 죽이는 kill 명령과는 달리 프로세스에 시그널을 전송합니다. 물론, 프로세스에 SIGKILL을 보내면 쉘 명령의 kill과 같은 역활을 합니다.
- 헤더: signal.h
- 형태: int kill(pid_t pid, int sig)
- 인수: pid_t pid
int sig 시그널 번호 - 반환: int 0 == 성공
-1 == 실패
kill() 함수는 특정 프로세스 뿐만 아니라 같은 그룹 ID가 같은 모든 프로세스에게 동시에 시그널을 전송할 수 있으며, 권한 안에 있는 모든 프로세스에게도 시그널을 전송할 수 있습니다.
int kill(pid_t pid, int sig);
첫 번째 인수는 pids는 KILL 대상 프로세스 ID, 두 번째 인수 sig는 시그널 번호입니다. pid는 프로세스 ID 값에 따라 아래와 같이 처리가 분류됩니다.
pid | 의미 |
양수 | 지정한 프로세스 ID에만 시그널을 전송 |
0 | 함수를 호출하는 프로세스와 같은 그룹에 있는 모든 프로세스에 시그널을 전송 |
-1 | 함수를 호출하는 프로세스가 전송할 수 있는 권한을 가진 모든 프로세스에 시그널을 전송 |
-1 이외의 음수 | 첫 번째 인수 pid 의 절대값 프로세스 그룹에 속하는 모든 프로세스에 시그널을 전송 |
C언어 kill() 함수 예제
단순 문자 출력 예제 | KILL 시그널 전송 예제 |
#include <stdio.h> #include <unistd.h> int main( void) { while( 1 ){ printf( "badayak.com\n"); sleep( 1); } return 0; } |
#include <stdio.h> #include <stdlib.h> #include <signal.h> int main( int argc, char *argv[]) { if ( argc < 2){ printf( "사용법: ./a.out [프로세스 ID]\n"); } else{ kill( atoi( argv[1]), SIGKILL); } } |
소스를 killed.c로 저장하고 killed.out으로 컴파일 합니다. | 소스를 killer.c로 저장하고 killer.out으로 컴파일 합니다. |
]$ gcc killed.c -o killed.out ]$ ./killed.out my pid=11349 badayak.com badayak.com badayak.com badayak.com badayak.com badayak.com 죽었음 ]$ |
]$ gcc killed.c -o killed.out ]$ ./killer.out 11349 ]$ |
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 시그널을 수신할 때까지 대기 함수 pause() (0) | 2020.03.15 |
---|---|
C언어 시그널 처리 함수 sigaction() (0) | 2020.03.15 |
C언어 시그널 처리 방법을 설정 함수 signal() (0) | 2020.03.15 |