首页 > 系统相关 >Linux多进程12-信号

Linux多进程12-信号

时间:2023-05-17 18:44:17浏览次数:31  
标签:SIGRTMAX 12 core 信号 Linux 进程 size SIGRTMIN

信号概念

  • 信号是 Linux 进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。
  • 发往进程的诸多信号,通常都是源于内核。引发内核为进程产生信号的各类事件如下:
    • 对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号。比如输入Ctrl+C通常会给进程发送一个中断信号。
    • 硬件发生异常,即硬件检测到一个错误条件并通知内核,随即再由内核发送相应信号给相关进程。比如执行一条异常的机器语言指令,诸如被 0 除,或者引用了无法访问的内存区域。
    • 系统状态变化,比如 alarm 定时器到期将引起 SIGALRM 信号,进程执行的 CPU
      时间超限,或者该进程的某个子进程退出。
    • 运行 kill 命令或调用 kill 函数。
  • 使用信号的两个主要目的是:
    • 让进程知道已经发生了一个特定的事情。
    • 强迫进程执行它自己代码中的信号处理程序。
  • 信号的特点:
    • 简单
    • 不能携带大量信息
    • 满足某个特定条件才发送
    • 优先级比较高
  • 查看系统定义的信号列表:kill –l
    • 前 31 个信号为常规信号,其余为实时信号。
$kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

image

image

image

信号的5种默认处理动作

  • 查看信号的详细信息:man 7 signal
  • 信号的 5 中默认处理动作
    • Term 终止进程
    • Ign 当前进程忽略掉这个信号
    • Core 终止进程,并生成一个Core文件
    • Cont 继续执行当前被暂停的进程
  • 信号的几种状态:产生、未决、递达
  • SIGKILL 和 SIGSTOP 信号不能被捕捉、阻塞或者忽略,只能执行默认动作。

Core的处理动作演示

一段实例代码

#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    /* code */
    char *buf;            //野内存
    strcpy(buf, "hello"); // err

    return 0;
}

运行

$./a.out 
段错误 (核心已转储)

显示目前资源限制的设定

$ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7224
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1048576
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7224
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

修改 core file size

$ulimit -c 1024
$ulimit -a
core file size          (blocks, -c) 1024
data seg size           (kbytes, -d) unlimited
...
...

运行a.out 生成core文件

$gcc core.c -g
$./a.out 
段错误 (核心已转储)

进入gdb

$gdb a.out
...
...
(gdb) core-file core
[New LWP 2599]
Core was generated by `./a.out'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000559e86c2613c in main (argc=1, argv=0x7ffdad8b7588) at core.c:8
8           strcpy(buf, "hello"); // err

SIGSEGV信号: 访问了非法内存, 在第8行发现这个错误

所以, core文件的作用是终止进程, 并生成一个core文件

标签:SIGRTMAX,12,core,信号,Linux,进程,size,SIGRTMIN
From: https://www.cnblogs.com/anqwjoe/p/17409738.html

相关文章

  • Linux多进程01-进程概述
    程序与进程程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程进程是正在运行的程序的实例。是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。......
  • 西门子PID程序,西门子PLC 1200和多台G120西门子 变频器Modbud RTU通讯,带西门子触摸屏,带
    西门子PID程序,西门子PLC1200和多台G120西门子变频器ModbudRTU通讯,带西门子触摸屏,带变频器参数/Modbus通讯报文详细讲解,PID自写FB块无密码可以直接应用到程序,PID带手动自动功能,可手动调节PID,注释详细,有图纸ID:698656140211742......
  • 西门子S7-1200控制5轴伺服程序案例。 S7-1200控 制5轴伺服程序
    西门子S7-1200控制5轴伺服程序案例。S7-1200控制5轴伺服程序案例。1.PTO伺服轴脉冲定位控制功能应用+速度模式应用+扭矩模式应用。2.程序为结构化编程,每一功能为模块化设计,具有一个项目都有的功能:自动_手动_单步_暂停后原位置继续运行_轴断电保持_报警功能_气缸运行及报警.......
  • linux-ubuntu安装 lrzsz
    ubuntu安装lrzsz方法1:二进制包自动安装sudoapt-getinstalllrzsz方法2:源码包手动安装2.1下载cd/server/toolswgethttps://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gztar-xzflrzsz-0.12.20.tar.gzcdlrzsz-0.12.20./configure--prefix=/usr/local/lrzszs......
  • Linux 内存管理 pt.3
    哈喽大家好,我是咸鱼在《Linux内存管理pt.2》中我们学习了多级页表和大页,我们知道了由于历史遗留的问题,Linux的页通常为4KB这样就会导致一个页表里面会有特别多页,为了解决这个问题,Linux提供了两种解决方案——多级页表和大页那么今天继续我们的Linux内存管理学习,我们今天......
  • linux-安装系统Ubuntu Server 14.04,16.04和17.10
    安装系统UbuntuServer14.04,16.04和17.10 本文以14.04位案例进行安装,其他版本相关问题会做注解1.选择要安装的系统语言本界面建议选择English,之后再选择中文安装对于14.x版本选择中文没有问题,但是对于16.04和17.10版本,该步骤选择中文后面会报错:2.选择安装过程中需要的语......
  • 在Linux/Windows/Mac上刷新DNS缓存的方法
    在Linux/Windows/Mac上刷新DNS缓存的方法刷新dns缓存让你可以得到新的域名解析。当你无法正确访问一个新注册的域名时就可以刷新dns缓存试试。但是不同的系统,Windows、MacOS和Linux上的方法是不一样的。1.Windows系统刷新DNS缓存开始-->运行-->输入cmd并回车在打开的命......
  • Jmeter部署到Linux实现分发压测时,controller机器回收测试报告时卡死
    问题检查与定位:检查slave-A和slave-B两台执行机,执行机已经finished,无报错,说明执行机已完成测试任务采集到的日志批量分析后得出的结论:在完成并发测试后,vuser要进行释放,由于没有完全释放导致controller机器一直等待(像卡死),而实际上是等待,问题定位后,进行检查发现:问题1: reportge......
  • 【CF1012E】【LOJ2818】Cycle Sort(并查集)
    Description给定一个⻓为nn的数列,你可以多次进行如下操作:选定kk个不同的下标i1,i2…iki1,i2......
  • linux-cmd-zip-unzip
    linux-cmd-zip-unzip参考地址https://www.runoob.com/linux/linux-comm-zip.html1.zip压缩1.1.zip语法参数zip[-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b<工作目录>][-ll][-n<字尾字符串>][-t<日期时间>][-<压缩效率>][压缩文件][文件...][-i<范本样式>][-x<范本样式>]#......