Linux - 信号-二、查看信号

1、通过 kill -l 指令可以查看信。
在这里插入图片描述

可靠信号:

  1. 又称之为RT信号或实时信号。 信号值位于SIGRTMIN(实时信号最小值)及SIGRTMAX(实时信号最大值)之间。
  2. 支持排队机制,确保多个信号能够被接收和处理,不会丢失。

非可靠信号:

  1. 信号值小于SIGRTMIN。
  2. 不支持排队机制,若一次性来了多个信号,这些信号不会排队,只会保留一个,后续的信号可能会被丢弃。

下面主要讨论的是1-31号信号

2、man 7 signal指令可以查看详细的信号信息。

在这里插入图片描述

TermCore的区别

一、Core(核心转储)

  1. 定义:当进程接收到某些信号(如SIGSEGV、SIGABRT等)时,如果操作系统配置了核心转储(CoreDump),那么进程当前的内存映像(包括代码、数据、堆栈等)会被写入到一个名为“core”的文件中。这个文件通常位于进程的当前工作目录下,文件名可能会附加进程的PID(进程标识符)以区分不同的核心转储文件。
  2. 目的:核心转储的主要目的是为了调试。当进程异常终止时,开发者可以通过分析核心转储文件来了解进程在终止时的状态,包括内存中的数据、堆栈信息等。这有助于定位问题的根源,并采取相应的修复措施。
  3. 触发条件:通常,只有当进程接收到某些特定的、与内存访问错误或程序异常终止相关的信号时,才会触发核心转储。这些信号的具体种类可能因系统而异,但通常包括SIGSEGV(段错误)、SIGABRT(异常终止)等。

通过ulimit命令查看操作系统是否开启Core
在这里插入图片描述
修改Core

ulimit -c 文件大小

产生core文件的条件
操作系统开启Core && 退出信号为Core

怎么查看退出信号是否为Core
在这里插入图片描述

开启Core后再执行下面程序后就会产生core文件

int test()
{
    int a = 10;
    //整数除零 -- 出异常 -- 信号:8
    int b = a / 0;
}

int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        test();
    }
    else
    {
        int status = 0;
        waitpid(id,&status,0);
        //打印第8位
        std::cout<<((status>>7)&0x1)<<std::endl;
    }

    return 0;
}

二、Term(终止进程)

  1. 定义:当进程接收到某些信号(如SIGTERM、SIGINT等)时,操作系统会立即终止该进程的执行。这意味着进程的所有线程都将被停止,进程所占用的资源(如内存、文件描述符等)将被释放。
  2. 目的:终止进程的目的是为了释放系统资源,并确保系统的稳定性和安全性。当进程不再需要运行或其行为可能对系统造成危害时,操作系统会发送终止信号来停止该进程。
  3. 触发条件:触发终止信号的条件可能因信号而异。例如,SIGTERM信号通常用于请求进程正常退出,而SIGINT信号则通常用于中断当前正在运行的进程(如用户按下Ctrl+C时)。其他信号(如SIGKILL)则具有更高的优先级,可以立即终止进程而不给进程留下任何清理资源的机会。
上一篇:【人工智能】ChatGPT多模型感知态识别


下一篇:toRefs