
posix_kill 함수를 사용하여 프로세스를 종료할 때, 프로세스가 이미 종료된 경우 오류가 발생할 수 있습니다. 이 경우에는 프로세스가 이미 종료된 경우가 아니라, 프로세스 ID가 잘못된 경우일 수 있습니다.
fork 함수를 사용하여 프로세스를 생성할 때, 자식 프로세스의 PID는 부모 프로세스의 PID와 동일합니다. 따라서, 부모 프로세스에서 자식 프로세스의 PID를 사용하여 kill 함수를 호출할 때, 자식 프로세스가 이미 종료된 경우 오류가 발생할 수 있습니다.
이러한 오류를 해결하기 위해, 자식 프로세스가 종료되기 전에 kill 함수를 호출하는 방법을 사용할 수 있습니다. 예를 들어, 자식 프로세스가 종료되기 전에 SIGTERM 신호를 보낼 수 있습니다.
다음은 예제 코드입니다.
#hostingforum.kr
c
#include
#include
#include
#include
void sigterm_handler(int sig) {
// SIGTERM 신호를 받았을 때, 프로세스를 종료합니다.
exit(0);
}
int main() {
pid_t pid = fork();
if (pid == 0) {
// 자식 프로세스
signal(SIGTERM, sigterm_handler); // SIGTERM 신호를 받았을 때, sigterm_handler 함수를 호출합니다.
while (1) {
printf("자식 프로세스 실행 중...n");
sleep(1);
}
} else if (pid > 0) {
// 부모 프로세스
sleep(5);
printf("부모 프로세스에서 자식 프로세스 종료 시도...n");
kill(pid, SIGTERM); // SIGTERM 신호를 보냅니다.
wait(NULL); // 자식 프로세스가 종료될 때까지 기다립니다.
} else {
printf("fork 오류...n");
exit(1);
}
return 0;
}
이 예제 코드에서는 자식 프로세스가 SIGTERM 신호를 받았을 때, sigterm_handler 함수를 호출하여 프로세스를 종료합니다. 부모 프로세스는 SIGTERM 신호를 보냈을 때, 자식 프로세스가 종료될 때까지 기다립니다.
2025-05-23 00:04