sigusr1 사용하는데 질문드립니다.

dkdlfkdlzm의 이미지

자식프로세스에서 부모프로세스로 시그널을 보내려합니다.
코드를 간단히 표현하면 이런식인데 parent 부분에서 출력이 안나오네요 어떻게해야하나요?

void sighandler(int signum)
{
    if(signum == SIGUSR1){
        printf("succcess\n");
    }
    else{
        printf("fail\n");
    }
}
 
 
int main(int argc, char *argv[])
{
    pid_t pid;
 
    pid = fork();
 
    struct sigaction sa2;
    sa2.sa_handler = sighandler;
    sa2.sa_flags=0;
    sigemptyset(&sa2.sa_mask);
    sigaction(SIGUSR1,&sa2,NULL);
 
    if(pid==0){
    {
       kill(getppid(),SIGUSR1);
       exit(0);
    }
    //parent
    signal(SIGUSR1,sighandler);
}
세벌의 이미지

소스코드는 code 태그 안에 넣어 주세요.

dkdlfkdlzm의 이미지

수정했습니다!

chadr의 이미지

시그널 핸들러를 등록하는 코드가 실행 되기 전에 자식 프로세스가 부모한테 시그널을 던졌을수도 있습니다.
시그널 핸들러는 등록하는 코드 위치를 바꿔보세요.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.