下面是我写了个即使按了Ctrl C进程也不会退出的例子
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <signal.h>
sigset_t prev_mask;
static char *SIG_NAME[] =
{"SIGHUP",
"SIGINT",
"SIGQUIT"
};
/* 设置收到Ctrol C 进程不退出*/
static void setUNBlock()
{
sigset_t mask;
sigemptyset(&mask);
sigaddset(&mask, SIGINT);
sigprocmask(SIG_BLOCK, &mask, &prev_mask);
}
/* 还原系统设置 */
static void restore_system_block(sigset_t *set)
{
sigprocmask(SIG_SETMASK, set, NULL);
}
/* signal处理函数 */
static void signal_hander(int _N)
{
printf("Caught signal: %s\n", SIG_NAME[_N - 1]);
exit(EXIT_SUCCESS);
}
int main(int argc, char **argv)
{
//注册收到Ctrl C的处理函数 signal_hander()
if (signal(SIGINT, signal_hander) == SIG_ERR)
{
printf("signal_error\n");
exit(EXIT_FAILURE);
}
setUNBlock();
int i = 0;
while(i < 10)
{
printf("process is sleep...\n");
sleep(1);
i++;
}
printf("_______________process is restored\n");
restore_system_block(&prev_mask);
while(1);
return 0;
}
网友评论