
posix_kill 함수는 프로세스 ID를 전달받아 해당 프로세스에 시그널을 보낼 수 있습니다. 프로세스 ID를 얻는 방법은 다음과 같습니다.
1. 프로세스 ID를 얻는 방법:
- `getpid()` 함수를 사용하여 현재 프로세스의 ID를 얻을 수 있습니다.
- `getppid()` 함수를 사용하여 현재 프로세스의 부모 프로세스의 ID를 얻을 수 있습니다.
- `wait()` 함수를 사용하여 프로세스를 기다리며, 프로세스의 ID를 얻을 수 있습니다.
시그널의 종류와 의미는 다음과 같습니다.
- `SIGTERM`: 프로세스를 종료하도록 요청합니다. 프로세스는 일반적으로 이 시그널을 받고 정상적으로 종료합니다.
- `SIGKILL`: 프로세스를 강제로 종료합니다. 이 시그널은 프로세스가 종료되지 않으면 강제로 종료합니다.
- `SIGINT`: 프로세스를 인터럽트하도록 요청합니다. 프로세스는 일반적으로 이 시그널을 받고 정상적으로 종료합니다.
- `SIGQUIT`: 프로세스를 종료하도록 요청합니다. 프로세스는 일반적으로 이 시그널을 받고 정상적으로 종료합니다.
프로세스를 강제로 종료하려면 `SIGKILL` 시그널을 사용해야 합니다. 그러나 `SIGKILL` 시그널은 프로세스가 종료되지 않으면 강제로 종료하므로, 일반적으로 프로세스를 종료하는 데 사용하지 않습니다. 대신 `SIGTERM` 시그널을 사용하여 프로세스를 종료하도록 요청하고, 일정 시간이 지난 후에 프로세스가 종료되지 않으면 `SIGKILL` 시그널을 사용하여 강제로 종료하는 것이 좋습니다.
posix_kill 함수의 사용 예제는 다음과 같습니다.
#hostingforum.kr
c
#include
#include
#include
#include
int main() {
// 현재 프로세스의 ID를 얻기 위해 getpid 함수 사용
pid_t pid = getpid();
printf("현재 프로세스 ID: %dn", pid);
// 다른 프로세스의 ID를 얻기 위해 fork 함수 사용
pid_t child_pid = fork();
if (child_pid == 0) {
// 자식 프로세스
printf("자식 프로세스 ID: %dn", getpid());
} else if (child_pid > 0) {
// 부모 프로세스
printf("부모 프로세스 ID: %dn", getpid());
// 자식 프로세스에 SIGTERM 시그널 보내기
kill(child_pid, SIGTERM);
} else {
// fork 실패
perror("fork");
exit(EXIT_FAILURE);
}
return 0;
}
위 예제에서는 현재 프로세스의 ID를 얻기 위해 `getpid` 함수를 사용하고, 다른 프로세스의 ID를 얻기 위해 `fork` 함수를 사용합니다. 또한 자식 프로세스에 `SIGTERM` 시그널을 보내는 예제를 제공합니다.
2025-03-30 14:51