在c中使用信号

问题描述 投票:0回答:1

我在c中写了一个简单的程序,在哪里fork我创建一个子进程:

#include <stdio.h>
#include <stdlib.h>
#include<signal.h>
#include<sys/types.h>

int handler(){

}
int main(int argc, char **argv)
{

    pid_t c=fork();
    if(c>0){
        sleep(1);
        printf("f:pid is %d \n",getpid());
        kill(c,SIGINT);
        wait(NULL);
    }

    if(c==0){
        pause();
        signal(SIGINT,handler);
        printf("child:pid is %d \n",getpid());
    }
}

问题是孩子什么都不打印。我认为暂停只是等待信号取消暂停过程,我无法理解为什么打印永远不会发生。任何想法?

c signals
1个回答
4
投票

您需要在暂停之前设置处理程序。否则,pause()将被信号中断,然后将采取信号的默认动作,即终止该过程。它永远不会添加处理程序,因为该进程首先被终止。

    if(c==0){
        signal(SIGINT,handler);
        pause();
        printf("child:pid is %d \n",getpid());
    }
© www.soinside.com 2019 - 2024. All rights reserved.