【Linux系统】信号:信号保存 / 信号处理、内核态 / 用户态、操作系统运行原理(中断)-两种信号默认处理

时间:2025-02-03 18:04:58

1、信号处理之忽略

::signal(2, SIG_IGN); // ignore: 忽略
#include <vector>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>

void handler(int signo)
{
    std::cout << "get a new signal: " << signo << std::endl;
    exit(1);
}

int main()
{
    // 信号捕捉:
    // 1. 默认
    // 2. 忽略
    // 3. 自定义捕捉
    ::signal(2, SIG_IGN); // ignore: 忽略
    while(true)
    {
        pause();
    }
}


运行结果如下: 显然对二号信号(ctrl+c) 没有效果了

在这里插入图片描述



2、信号处理之默认

::signal(2, SIG_DFL); // default:默认。
#include <vector>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <iostream>
#include <string>

void handler(int signo)
{
    std::cout << "get a new signal: " << signo << std::endl;
    exit(1);
}

int main()
{
    // 信号捕捉:
    // 1. 默认
    // 2. 忽略
    // 3. 自定义捕捉
    //::signal(2,SIG IGN);// ignore:忽略:本身就是一种信号捕捉的方法,动作是忽略
    ::signal(2, SIG_DFL); // default:默认。
    while (true)
    {
        pause();
    }
}

这些本质上是宏,而且是被强转后的

在这里插入图片描述