首页 > 系统相关 >Linux--signal

Linux--signal

时间:2024-02-07 12:12:47浏览次数:22  
标签:set 函数 -- signal int 信号 Linux 进程 信号处理

Linux的signal.h头文件包含了一系列与信号处理相关的函数。以下是一些主要的函数及其简要描述:

int signal(int signum, void (*handler)(int)):

功能:为指定的信号注册一个处理函数。
参数:signum 是信号的编号,handler 是当信号发生时被调用的函数。
返回值:成功时返回之前的信号处理函数,失败时返回 SIG_ERR。

void (signal(int signum, void (handler)(int)))(int):

功能:这是一个带有默认参数的函数,用于查询或设置信号处理函数。
参数:如果 handler 是 SIG_IGN,则忽略该信号;如果 handler 是 SIG_DFL,则使用默认的信号处理函数;否则,使用 handler 作为信号处理函数。
返回值:返回之前的信号处理函数。

int raise(int signum):

功能:向当前进程发送一个信号。
参数:signum 是要发送的信号的编号。
返回值:成功时返回0,失败时返回-1。

int sigblock(int mask) 和 int sigsetmask(int mask):

功能:更改被阻塞的信号集。sigblock 是旧式的函数,sigsetmask 是其替代品。
参数:mask 是一个位掩码,表示被阻塞的信号。
返回值:成功时返回之前的信号掩码,失败时返回-1。

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset):

功能:检查或更改被阻塞的信号集。
参数:how 指定如何更改信号集,set 是新的信号集,oldset 用于存储旧的信号集。
返回值:成功时返回0,失败时返回-1。

int sigpending(sigset_t *set):

功能:检查当前进程待处理的信号集。
参数:set 用于存储待处理的信号集。
返回值:成功时返回0,失败时返回-1。

int sigsuspend(const sigset_t *set):

功能:更改被阻塞的信号集,并暂停进程执行,直到接收到一个信号。
参数:set 是新的信号集。
返回值:总是返回-1,并设置 errno 为 EINTR。

int sigemptyset(sigset_t *set), int sigfillset(sigset_t *set), int sigismember(const sigset_t *set, int signum):

功能:操作信号集。
sigemptyset 清空信号集,sigfillset 填充信号集,sigismember 检查信号是否在信号集中。
返回值:成功时返回0,失败时返回-1。

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact):

功能:检查或更改指定信号的处理行为。
参数:signum 是信号编号,act 是新的信号行为,oldact 用于存储旧的信号行为。
返回值:成功时返回0,失败时返回-1。

这些函数提供了在Linux程序中处理信号的基本能力。使用这些函数,程序员可以注册信号处理函数,发送信号,以及查询和修改信号的处理行为。需要注意的是,信号处理在并发和异步编程中是一个非常重要的主题,需要谨慎处理以避免竞态条件和死锁等问题。

在Linux中,信号处理是一个非常重要的机制,用于响应异步事件。Linux系统支持多种类型的信号,每种信号都有其特定的编号和名称。这些信号可以分为几类,每类信号都有其特定的用途和行为。

以下是一些常见的Linux信号类型及其简要描述:

终止信号 (Termination Signals):

SIGINT (信号2): 由用户通过键盘产生的中断信号,通常是Ctrl+C。
SIGQUIT (信号3): 由用户通过键盘产生的退出信号,通常是Ctrl+\。
SIGKILL (信号9): 强制终止进程的信号,不能被进程捕获或忽略。
SIGTERM (信号15): 请求进程终止的信号,可以被进程捕获并处理。

挂起信号 (Suspension Signals):

SIGSTOP (信号17): 停止进程的执行。
SIGTSTP (信号20): 停止进程的执行,通常与终端控制相关。
SIGTTIN (信号21): 后台进程尝试读取终端时发送。
SIGTTOU (信号22): 后台进程尝试写入终端时发送。

继续信号 (Continuation Signals):

SIGCONT (信号19): 继续执行之前被SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU停止的进程。

程序异常信号 (Program Exception Signals):

SIGSEGV (信号11): 进程访问了无效的内存地址。
SIGFPE (信号8): 进程发生了浮点异常,如除以零。
SIGILL (信号4): 进程执行了非法指令。
SIGABRT (信号6): 由进程自身通过abort函数发送的终止信号。

其他信号:

SIGCHLD (信号17): 子进程结束时发送给父进程的信号。
SIGALRM (信号14): 由alarm函数设置的定时器到期时发送。
SIGURG (信号16): 表示有紧急数据待处理,通常与套接字相关。

除了上述常见的信号外,Linux还支持其他多种信号,每种信号都有其特定的用途和行为。可以使用kill -l命令查看当前系统所支持的所有信号列表。

需要注意的是,进程可以注册信号处理函数来响应这些信号,也可以显式地发送信号给其他进程。信号处理函数可以自定义信号的行为,例如忽略信号、终止进程、执行清理操作等。然而,某些信号(如SIGKILL和SIGSTOP)是不可捕获或忽略的,它们的行为是固定的。

标签:set,函数,--,signal,int,信号,Linux,进程,信号处理
From: https://www.cnblogs.com/yubo-guan/p/18010807

相关文章

  • 【论文笔记】用于遥感图像语义分割的几何边界引导特征融合与空间-语义上下文聚合技术
    作者:YupeiWang发表年代:2023使用的方法:边界指导、上下文聚合来源:IEEETIP方向:语义分割期刊层次:CCFA;计算机科学1区;IF13.3文献链接:https://doi.org/10.1109/TIP.2023.3326400WangY,ZhangH,HuY,etal.Geometricboundaryguidedfeaturefusionandspa......
  • 洛谷美化食用指北
    洛谷美化食用指北(蒟蒻的第一篇技术性文章)话不多说,直奔正题——1.洛谷主界面美化1.1氩洛谷脚本的安装和使用首先安装一个油猴扩展(非谷歌浏览器都可以,因为Google应用商店被墙了)然后去这个网站下载脚本,安装即可。刷新洛谷主页面,是不是焕然一新~2.洛谷个人主页的美化2......
  • 七上道法复习整理
    第一单元成长的节拍第一课中学时代一中学时代的意义是什么?1.我们有了一个新的名字——中学生!2.我们站在一个新的起点上。3.中学时代是人生发展的一个新阶段。4.中学时代见证着一个人从少年到青年的生命进阶。二成长的礼物有哪些?1.中学生活,对我们来说意味着新的机会......
  • TCP拥塞控制算法初步介绍
    TCP拥塞控制算法初步介绍写得较为浅显,若有错误的地方还请指正.一、TCP拥塞控制:让发送方自己感知网络的拥塞程度并限制其能向链接发送流量的速率.限制方法:设置LastByteSent-LastByteAcked<=min{cwnd,rwnd}即已发送而未被确认的流量小于等于两个窗口长其中,cwnd......
  • 使用kubeadm部署kubernetes1.23(学习使用)
    注释:此次操作使用VMwareWorkstationPro17虚拟机进行本次使用单master节点,双worker节点组成的最小化单主节点的学习环境1.K8S所有节点环境准备xshell发送所用会话,包括harbor仓库虚拟机操作系统环境准备参考链接:https://kubernetes.io/zh/docs/setup/production-environmen......
  • [Ngbatis源码学习] Ngbatis 源码学习之资源加载器 DaoResourceLoader
    Ngbatis源码阅读之资源加载器DaoResourceLoaderDaoResourceLoader是Ngbatis的资源文件加载器,扩展自MapperResourceLoader。本篇文章主要分析这两个类。1.相关类MapperResourceLoaderDaoResourceLoader2.MapperResourceLoader在介绍DaoResourceLoader之前有必要......
  • 2024医保的部分知识
    2024医保的部分知识背景简单总结一下,后续也许有用处关于医保的分类除去公务员、领导(行政级别,部分事业单位)等的特殊特权群体。以及使用商业保险覆盖自己诊疗全过程的富人阶层。中国普通人现在医保主要分为两类:城镇职工医疗保险城乡居民医疗保险两者在门诊和住院时......
  • 完全免费,文字转语音、AI语音合成,视频配音就用这两款软件!
    最近又有不少小伙伴找我要文字转语音、配音软件,刚好最近我也找了两款还比较不错的免费软件,今天就来分享给大家。最后还推荐了一款我自己一直在用的软件,建议认真看看! 01-Vpot-FREE(电脑)它是一款永久免费的文字转语音软件,由B站大佬开发的,无需安装,解压后找到如图文件,双击即可打......
  • 走廊泼水节
    来严格证明一下做法我们利用数学归纳法证明,过程很像“推论+数归证明Kruscal”假设我们按照书上这么添加后,执行Kruscal当前执行到\(i\)这条边,已经选上的边都是最开始的树边,已经循环过但没选上的边都是添加的非树边假设\(i\)是添加的边,那么\(i\)一定不会被选上,因为此时已经选上......
  • github action创建一个前端的自动话部署流程。
    上次是部署后端,这次是部署前端,前面的步骤都一样,后面就直接贴部署的ymlname:buildandteston:push:branches:-masterjobs:build:runs-on:ubuntu-lateststeps:-name:checkoutrespositoryuses:actions/checkout@v2-nam......