개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.23 00:03

posix_kill 관련 질문

목록
  • DNS마스터 1일 전 2025.05.23 00:03
  • 4
    1
제가 posix_kill 함수를 사용하여 프로세스 종료를 시도하였으나, 다음과 같은 오류를 만났습니다.

c

#include 

#include 

#include 

#include 



int main() {

    pid_t pid = fork();



    if (pid == 0) {

        // 자식 프로세스

        while (1) {

            printf("자식 프로세스 실행 중...n");

            sleep(1);

        }

    } else if (pid > 0) {

        // 부모 프로세스

        sleep(5);

        printf("부모 프로세스에서 자식 프로세스 종료 시도...n");

        kill(pid, SIGTERM);

    } else {

        printf("fork 오류...n");

        exit(1);

    }



    return 0;

}



위 코드에서 `kill(pid, SIGTERM)`을 사용하여 자식 프로세스를 종료하려고 하였으나, 다음과 같은 오류 메시지를 받았습니다.

`kill: pid: No such process`

오류 메시지에 따라 이는 프로세스가 이미 종료된 경우일 수 있습니다. 하지만, 자식 프로세스는 5초간 실행 중이었으며, 종료되지 않았습니다.

이러한 오류를 해결하고자 posix_kill 함수를 사용하는 방법에 대해 알려주세요.

    댓글목록

    profile_image
    나우호스팅  1일 전



    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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 21,987건 / 13 페이지

검색

게시물 검색