프로세스 그룹 변경 후 CTR-C를 수신할 수 없습니다.

프로세스 그룹 변경 후 CTR-C를 수신할 수 없습니다.

나는 이 코드를 가지고 있습니다 :

static void signal_handler(int signum);

int main(void)
{
    const struct sigaction sa = {
        .sa_handler = signal_handler,
    };

    sigaction(SIGINT, &sa, NULL);
    setpgid(0, 0);

    printf("[LEADER]: PID: %d, PARENT: %d, PROCESS GROUP: %d\n",
           getpid(), getppid(), getpgrp());

    for (;;) {
        printf("test\n");
        sleep(3);
    }

    return 0;
}

static void signal_handler(int signum)
{
    switch (signum) {
    case SIGINT:
        #define msg "INT received, exiting...\n"
        write(STDOUT_FILENO, msg, sizeof(msg));
        #undef msg
        exit(EXIT_FAILURE);
    }
}

프로세스 그룹 변경 후

setpgid(0, 0);

더 이상 터미널에서 CTRL-C(SIGINT)를 수신할 수 없습니다. 저는 이 애플리케이션을 실행하기 위해 make 유틸리티를 사용하고 있습니다.

프로세스를 수동으로 실행하면('make run' 규칙 없이) 신호가 성공적으로 도착합니다. 나는 웹에서 다음과 같이 빨간색을 많이 사용했습니다.

SIGINT 신호는 터미널 회선 규칙에 의해 생성되며 터미널 전경 프로세스 그룹의 모든 프로세스에 브로드캐스팅됩니다.

이 주장에 따르면 터미널에서 포그라운드 프로세스가 애플리케이션인 경우 CTRL-C 인터럽트를 수신할 수 없는 이유는 무엇입니까? 프로세스 그룹은 제조사와 애플리케이션 간에 다릅니다.

USER    PID  PPID  PGID   SESS JOBC STAT   TT       TIME COMMAND
vitto  1662  1661  1662      0    1 S    s000    0:00.16 -zsh
vitto  3956  1662  3956      0    1 S+   s000    0:00.01 make run
vitto  3969  3956  3969      0    1 S    s000    0:00.00 bin/application

하지만 CTRL-C를 누를 때 bin/application가 아닌 을 보고 있습니다 make. 따라서 bin/application의 프로세스 그룹 에 신호를 보내야 합니다 . 그러나 분명히 그렇지 않습니다.

그래서 내 질문은 이 경우 신호의 실제 수신기는 무엇입니까? 조언 감사합니다

관련 정보