Linux——31个普通信号

devtools/2024/9/23 7:43:29/

每种信号的含义

在Linux操作系统中,信号是一种进程间通信的方式,用于通知进程发生了某种事件。Linux中的普通信号(standard signals)有31个,每个信号都有特定的用途。以下是这31个普通信号的列表及其描述:

  1. SIGHUP (1): 挂起信号,通常在终端断开或关闭时发送给控制进程。
  2. SIGINT (2): 中断信号,通常由用户按下Ctrl+C键发送。
  3. SIGQUIT (3): 退出信号,通常由用户按下Ctrl+\键发送并生成核心转储。
  4. SIGILL (4): 非法指令,程序执行了非法或未定义的机器语言指令。
  5. SIGTRAP (5): 跟踪/断点陷阱,用于调试。
  6. SIGABRT (6): 异常终止,由abort()函数调用发送。
  7. SIGBUS (7): 总线错误,内存访问对齐错误。
  8. SIGFPE (8): 浮点异常,如除零或溢出。
  9. SIGKILL (9): 强制终止信号,不能被捕获或忽略,立即终止进程。
  10. SIGUSR1 (10): 用户定义信号1,应用程序可以自定义使用。
  11. SIGSEGV (11): 段错误,非法内存访问。
  12. SIGUSR2 (12): 用户定义信号2,应用程序可以自定义使用。
  13. SIGPIPE (13): 管道破裂,写入一个没有读取端的管道。
  14. SIGALRM (14): 闹钟信号,由alarm()函数设置的定时器到期时发送。
  15. SIGTERM (15): 终止信号,程序可以捕获该信号并执行清理操作。
  16. SIGSTKFLT (16): 协处理器堆栈错误(较少使用)。
  17. SIGCHLD (17): 子进程状态改变,当子进程终止或停止时发送给父进程。
  18. SIGCONT (18): 继续执行,如果进程已停止则恢复其执行。
  19. SIGSTOP (19): 停止执行,不能被捕获或忽略。
  20. SIGTSTP (20): 终端停止信号,通常由用户按下Ctrl+Z键发送。
  21. SIGTTIN (21): 后台进程尝试从终端读取时发送。
  22. SIGTTOU (22): 后台进程尝试向终端写入时发送。
  23. SIGURG (23): 紧急条件,套接字上有紧急数据可读。
  24. SIGXCPU (24): CPU时间限制超时。
  25. SIGXFSZ (25): 文件大小限制超时。
  26. SIGVTALRM (26): 虚拟定时器到期。
  27. SIGPROF (27): 统计定时器到期。
  28. SIGWINCH (28): 终端窗口大小改变。
  29. SIGPOLL (29): I/O操作事件(SysV定义)。
  30. SIGPWR (30): 电源故障。
  31. SIGSYS (31): 非法系统调用。

这些信号在编程和系统管理中有着重要的应用。通过使用信号,进程可以处理各种异常和特殊情况,实现更健壮和灵活的程序设计。

捕获SIGINT信号

SIGINT信号通常由用户按下Ctrl+C键发送。以下代码展示了如何捕获和处理SIGINT信号:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>// 信号处理函数
void handle_sigint(int sig) {printf("Caught signal %d (SIGINT)\n", sig);
}int main() {// 注册信号处理函数signal(SIGINT, handle_sigint);// 无限循环,等待信号while (1) {printf("Running...\n");sleep(1);}return 0;
}

编译并运行该程序后,当你按下Ctrl+C时,它将捕获SIGINT信号并调用handle_sigint函数。

捕获SIGTERM信号

SIGTERM信号通常用于请求进程终止。以下代码展示了如何捕获和处理SIGTERM信号:

 

#include <stdio.h>
#include <signal.h>
#include <unistd.h>// 信号处理函数
void handle_sigterm(int sig) {printf("Caught signal %d (SIGTERM)\n", sig);// 进行清理工作printf("Cleaning up...\n");// 终止程序_exit(0);
}int main() {// 注册信号处理函数signal(SIGTERM, handle_sigterm);// 无限循环,等待信号while (1) {printf("Running...\n");sleep(1);}return 0;
}

编译并运行该程序后,可以通过以下命令发送SIGTERM信号:

kill -SIGTERM <pid>

其中,<pid>是程序的进程ID。

捕获SIGCHLD信号

SIGCHLD信号在子进程终止或停止时发送给父进程。以下代码展示了如何捕获和处理SIGCHLD信号:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>// 信号处理函数
void handle_sigchld(int sig) {// 等待子进程终止wait(NULL);printf("Caught signal %d (SIGCHLD). Child process terminated.\n", sig);
}int main() {// 注册信号处理函数signal(SIGCHLD, handle_sigchld);// 创建子进程pid_t pid = fork();if (pid == 0) {// 子进程代码printf("Child process running...\n");sleep(2);printf("Child process exiting...\n");_exit(0);} else {// 父进程代码printf("Parent process waiting for child to terminate...\n");// 无限循环,等待信号while (1) {sleep(1);}}return 0;
}

编译并运行该程序后,子进程将在2秒后终止,父进程将捕获SIGCHLD信号并调用handle_sigchld函数。

两种不能被忽略的信号 

SIGKILL和SIGSTOP

两种不能被捕捉的信号

SIGKILL和SIGSTOP


http://www.ppmy.cn/devtools/55670.html

相关文章

Uniapp获取具体地理位置

使用uniapp自带uni.getLocation获取当前定位经纬度 再调用高德逆地理编码API&#xff0c;查到具体位置信息 https://restapi.amap.com/v3/geocode/regeo?location${longitude},${latitude}&key${key}&extensionsall 但是个人申请的key&#xff0c;有配额限制 最多每…

VUE\JS处理在循环中异步和同步执行的问题

业务场景&#xff1a; 1、有一个组别集合&#xff0c;每一个小组别对象里面有一个数据集合&#xff0c;需要循环去校验每个不同组里的数据&#xff08;不同组合因为一些特殊属性不能合并到一个组里&#xff09;&#xff0c;全都符合就通过验证&#xff0c;去处理后续业务。 2、…

NLP之实体抽取

简介 实体抽取(Entity Extraction)是自然语言处理(NLP)领域中一项重要的技术,它的目的是从非结构化的文本数据中识别并提取出有意义的实体。 实体是指文本中表示某种具体事物的词语或短语,通常包括以下几类: 人名&#xff1a;如"马云"、“比尔盖茨” 地名&#xf…

【unity笔记】五、UI面板TextMeshPro 添加中文字体

Unity 中 TextMeshPro不支持中文字体&#xff0c;下面为解决方法&#xff1a; 准备字体文件&#xff0c;从Windows系统文件的Fonts文件夹里拖一个.ttf文件&#xff08;C盘 > Windows > Fonts &#xff09; 准备字库文件,新建一个文本文件&#xff0c;命名为“字库”&…

grafana连接influxdb2.x做数据大盘

连接influxdb 展示数据 新建仪表盘 选择存储库 设置展示

MIGO增强(扩展字段,屏幕增强字段,常规保存增强)

1.MIGO前台增强: 1.SE18找到增强点:MB_GOODSMOVEMENT 2.找到相应的BADI:右键创建实施 3.找到重写的方法 METHOD if_ex_mb_document_badi~mb_document_before_update.DATA:lv_stat TYPE c,lv_type TYPE bapi_mtype,lv_msg TYPE bapi_msg.DATA:lv_message TYPE string.IF sy-tc…

Linux shell编程学习笔记59: ps 获取系统进程信息,类似于Windows系统中的tasklist 命令

0 前言 系统进程信息是电脑网络信息安全检查中的一块重要内容&#xff0c;对于使用Linux和基于Linux作为操作系统的电脑来说&#xff0c;可以使用ps命令。 1 ps命令 的功能、格式和选项说明 1.1 ps命令 的功能 Linux 中的ps&#xff08;意为&#xff1a;process status&…

基于weixin小程序的民宿短租系统的设计与实现

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;房主管理&#xff0c;房间类型管理&#xff0c;用户管理&#xff0c;民宿信息管理&#xff0c;民宿预订管理&#xff0c;系统管理 小程序功能包括&#xff1a;系统首页&#xff0c;民宿信息&#xff0c…