【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数

文章目录

    • 2.19 信号概述
      • 信号的概念
      • Linux信号一览表
      • 信号的5种默认处理动作
      • core
      • core文件权限及位置设置
    • 2.20 kill、raise、abort函数(给进程发信号)


2.19 信号概述

信号的概念

【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第1张图片

【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第2张图片

Linux信号一览表

共62种信号。
【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第3张图片【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第4张图片SIGKILL:所有进程不包括僵尸进程

【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第5张图片SIGSTOP:暂停。不是结束
【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第6张图片

信号的5种默认处理动作

【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第7张图片

core

#include 
#include 

int main() {

    char * buf;//指针没有指向一个具体的合法内存

    strcpy(buf, "hello");//产生错误

    return 0;
}

【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第8张图片

  1. 先修改core文件的最大容量,否则如果是0的话,进程就算收到信息也不会产生core文件(ulimit -c xxx)
  2. 生成可调试的可执行文件 gcc xx.c -g
  3. 运行 ./a.out 此时就会生成包含错误信息的core文件
  4. gdb a.out 进入调试模式 输入:core-file core
    【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第9张图片SIGSEGV:访问非法内存导致的错误

core文件权限及位置设置

  • core文件大小为0表示不会产生core文件,通过ulimit -c 1024将core文件大小修改成1024即会产生core文件。

  • 并使用sudo bash -c "echo core > /proc/sys/kernel/core_pattern"指令来进行写入,指定程序所在目录为core文件生成目录。

2.20 kill、raise、abort函数(给进程发信号)

【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数_第10张图片
子进程先执行还是父进程先执行不确定,他们抢占系统资源。

#include 
#include 
#include 
#include 

int main() {

    pid_t pid = fork();

    if(pid == 0) {
        // 子进程
        int i = 0;
        for(i = 0; i < 5; i++) {
            printf("child process\n");
            sleep(1);
        }

    } else if(pid > 0) {
        // 父进程
        printf("parent process\n");
        sleep(2);
        printf("kill child process now\n");
        kill(pid, SIGINT);//终止进程,pid为子进程的进程号
    }

    return 0;
}

执行结果如下:

你可能感兴趣的:(linux)