gpt4 book ai didi

c - 阻塞和解除阻塞 SIGINT 和 SIGQUIT

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:36 25 4
gpt4 key购买 nike

我正在编写一个有两个 for 循环的程序,在第一个 for 循环期间(仅打印 1-5 并在其间休眠 1 秒)SIGINT 和 SIGQUIT 将被阻止,在第二个 for 循环中仅 SIGINT 将被阻止阻止。我成功地阻止了第一个 for 循环的正确信号,然后在第二个 for 循环中,我尝试从被阻止中删除 SIGQUIT 但两个信号似乎仍然被阻止。

这是我目前拥有的:

#include <unistd.h>
#include <stdio.h>
#include <wait.h>
#include <signal.h>
#include <string.h>


void hd1(int sig){
if(sig == SIGINT){
printf(" SIGINT Recieved\n");
}else if(sig == SIGQUIT){
printf(" SIGQUIT Recieved\n");
}
}


int main(){
sigset_t new_set;
sigset_t old_set;

//struct sigaction act;
//memset(&act, 0, sizeof(act));

//act.sa_handler = hd1;

//sigaction(SIGINT, &act, 0);
//sigaction(SIGQUIT, &act, 0);

sigemptyset(&new_set);
sigaddset(&new_set, SIGINT);
sigaddset(&new_set, SIGQUIT);

sigprocmask(SIG_BLOCK, &new_set, &old_set);

for(int i = 1; i <= 5; i++){
printf("%d\n", i);
sleep(1);
}


sigdelset(&new_set, SIGQUIT);


for(int i = 1; i <= 5; i++){
printf("%d\n", i);
sleep(1);
}
}

我曾尝试使用 sigprocmask 解锁并使用 setmask 重置掩码,但是当我解锁信号时它会在循环后终止程序。

最佳答案

只需使用 sigprocmask();第二次。并使用 SIG_SETMASK

SIG_SETMASK The set of blocked signals is set to the argument set.

sigdelset(&new_set, SIGQUIT);
sigprocmask(SIG_SETMASK, &new_set, NULL);

关于c - 阻塞和解除阻塞 SIGINT 和 SIGQUIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47059627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com