小编Eli*_*io 的帖子

处理 sigaction 时,我的 printf 没有出现,直到我退出

我是 Unix 中的信号新手,这个练习的目的是禁用 SIGINT 来停止程序并使用 SIGQUIT 代替,当我按下 ctrl-c 时它成功地忽略了 SIGINT 但 printf 没有显示,直到我按下 Ctrl-/这是针对 SIGQUIT 的,所有消息都会同时出现。

示例:如果我按 ctrl-c 4 次,则 ctrl-/:只有在按 ctrl-\ 后,我才会收到 4 条消息,说我已按 Ctrl-c,然后退出您发送了 SIGQUIT 信号。

如果我只按 ctrl-c,我什么也得不到,但至少它被忽略了

struct sigaction action;

void hand(int sig)
{
    switch(sig){
    case SIGINT:
        printf("You have presed ctrl-c");
        break;
    case SIGQUIT:
        printf("Quittin you sent a SIGQUIT signal");
        exit(SIGQUIT);
        break;
    default:
        printf("WRONG SIGNAL");
        exit(-1);
        break;
    }
}

int main()
{       
    action.sa_handler=hand;
    printf("Ctrl-C disabled, press Ctrl-/ to quit...\n");
    sigaction(SIGINT,&action,NULL);
    sigaction(SIGQUIT,&action,NULL);
    while(1){
        sleep(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

c unix signals

2
推荐指数
1
解决办法
80
查看次数

标签 统计

c ×1

signals ×1

unix ×1