linux signal用来做什么

linux signal用来通知进程某个特定事件的发生或者是让进程执行某个特定的处理函数;signal即信号,是Unix家族中一个古老的通信机制;信号可以来自终端的键盘字符输入,比如control-C触发的SIGINIT,也可以来自与硬件或软件有关的异常,比如应用程序访问了无效地址触发的SIGSEGV,定时器到期触发的SIGALARM等。

linux signal用来做什么

本教程操作环境:linux5.9.8系统、Dell G3电脑。

linux signal用来做什么?

无阶未来模型擂台/AI 应用平台 无阶未来模型擂台/AI 应用平台

无阶未来模型擂台/AI 应用平台,一站式模型+应用平台

无阶未来模型擂台/AI 应用平台 35 查看详情 无阶未来模型擂台/AI 应用平台

Linux中的信号处理机制

信号(Signal)是Unix家族中一个古老的通信机制,主要用来通知进程某个特定事件的发生,或者是让进程执行某个特定的处理函数。说它古老,是因为它在第一代Unix系统中就已经存在了。

信号的发送

信号可以来自终端(terminal)的键盘字符输入,比如control-C触发的SIGINIT;也可以来自与硬件或软件有关的异常,比如应用程序访问了无效地址触发的SIGSEGV(segmentation fault),定时器到期触发的SIGALARM等。这些信号都是由内核发送给进程的。

进程收到的信号还可以来自于其他进程。但不是所有的进程都可以向其他任意一个进程发送信号,只有具有root权限的super user才可以这么做,对于普通user的进程,只能向属于同一user的进程发送信号。

那进程可以向内核发送信号吗?可以是可以,但内核线程是不会响应的,发了也白发,除非……你修改内核代码。

通常信号被认为是一种异步的机制,但是在Linux的代码中,以下由异常引起的信号也被称为”synchronous”的:

#define SYNCHRONOUS_MASK (sigmask(SIGSEGV) | sigmask(SIGBUS) | sigmask(SIGILL) |  sigmask(SIGTRAP) | sigmask(SIGFPE) | sigmask(SIGSYS))

这里我们称接收信号的进程为“目标进程”。传统的信号发送函数是kill(),这名字看起来好吓人,感觉好像是目标进程马上就要被“杀”掉了。事实上,虽然各路信号都用kill()来发送,但真正要”kill”掉进程的,只占一小部分。当然,现在已经有了功能更强,名字也更友好的sigqueue()了。

来看下两者的函数原型:

int kill(pid_t pid, int sig);int sigqueue(pid_t pid, int sig, const union sigval value);

pid代表目标进程的PID。Linux中进程的PID都是正数,那参数pid的值如果是0或者负数,是不是就是非法的呢?非也,事实上,0和负数在这里都是有其他用途的。Linux里有个进程组的概念(process group),表示一类进程的集合。在kill()中,参数pid为”0″说明信号是发给当前进程所在进程组的所有进程,小于”-1″则是向编号为-pid的进程组发送信号。

__kill_pgrp_info(sig, info, pid ? find_vpid(-pid) : task_pgrp(current));

pid为”-1″表示发送给除Init进程和自身以外的所有进程,或者说是除自身以外的所有pid大于1的进程。

for_each_process(p) {if (task_pid_vnr(p) > 1 && !same_thread_group(p, current))             ...

如果这里pid是进程自己的PID,那么就是进程给自身发送信号。为此,Linux还提供了一个更简洁的接口:raise()函数。

kill(getpid(), sig) --> raise(sig)

需要注意的是,在sigqueue()中,不能通过将参数pid的值设为负数来向整个进程组发送信号。

sig代表要发送信号的编号,Linux中的信号编号是从1开始的,那参数sig的值如果为0会怎样呢?这里的0也有妙用,sig为”0″时并不会真正的往目标进程(或进程组)发送信号,而是用来检测目标进程(或进程组)是否存在。

至于sigqueue增加的第三个参数,其定义是这样的:

union sigval {int sival_int;void __user *sival_ptr;};

传统的信号是没有传递消息的功能的,sigval算是稍微扩展了一下信号的通信能力。比如,通信双方可以事先约定某些事件为特定的int值,这个”sival_int”就可以用来保存具体的int值,目标进程可以据此来区分不同的事件,做出不同的响应。当然,这种方法传递的消息内容受限,且不易扩展,因而不适合用作常规的通信手段。

信号的内核处理

就算是进程之间发送信号,那也是要经过内核的,可以理解成是被内核“截获”了吧。

linux signal用来做什么9d736b22d536848a412277333cda07b.png

由于内核态和用户态的切换操作在不同的硬件体系架构上是不同的,而且有一些信号,比如SIGCHLD和SIGSTOP,其实现也是和架构相关的,所以Linux中signal机制的很多代码都是放在架构相关的目录下的,比如”/arch/arm/kernel/signal.c”。

一个信号的相关信息在内核中用siginfo_t结构体表示:

siginfo_t{    int si_signo;    int si_sicode;    union __sifields _sifields;    ...}

si_signo是信号的编号,从1到64的值都是合法的。si_sicode记录了信号的来源,比如SI_USER表示信号是由进程调用kill()发出的,SI_QUEUE是由进程调用sigqueue()发出的,SI_KERNEL则说明该信号由内核产生的。_sifields对不同的信号会有不同的含义,通常包括信号发送进程的si_pid,发送进程所属user的si_uid等。对于由sigqueue()发送的信号,还包括”sigval “参数所携带的附加信息。

内核在截获到一个进程发送的信号后,会首先做一系列的检查,比如该信号的值是否合法啦,进程有没有发送这个信号的权限啦。如果检查通过,就调用copy_from_user()将该信号的相关信息复制到siginfo_t结构体中。

相关推荐:《Linux视频教程》

以上就是linux signal用来做什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/321180.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
vivo浏览器下载的图片找不到在相册里怎么办_vivo浏览器下载图片找不到的解决方法
上一篇 2026年11月1日 20:39:09
部署到服务器后,POST请求HTTPS接口为何会报空指针?
下一篇 2025年11月7日 08:49:15

相关推荐

  • linux的基本文件类型有哪几种

    linux的基本文件类型有哪几种linux的基本文件类型有哪几种linux的基本文件类型有哪几种linux的基本文件类型有哪几种

    linux的基本文件类型有5种:1、普通文件,是指不包含有文件系统信息的结构信息的文件,是用户所接触到的文件;2、目录文件,是用于存放文件名以及其相关信息的文件,可以包含下一级文件目录或普通文件,是内核组织文件系统的基本节点;3、链接文件,是指向一个真实存在的文件链接;4、设备文件,作用是访问外部设…

    2026年11月1日 • 用户投稿
    200
  • 《土豆兄弟》大型更新”新黎明”上线:多款新功能实装

    《土豆兄弟》大型更新”新黎明”上线:多款新功能实装《土豆兄弟》大型更新”新黎明”上线:多款新功能实装《土豆兄弟》大型更新”新黎明”上线:多款新功能实装《土豆兄弟》大型更新”新黎明”上线:多款新功能实装

    开发商evil empire时隔一年于10月28日正式发布人气肉鸽游戏《土豆兄弟》最新重大更新“新黎明”。一起来看看都有哪些内容吧! 完整公告如下: 土豆们大家好! 经历了为期两周的beta测试,#13更新《新黎明》终于正式上线了!感谢各位在测试中贡献了各种反馈和bug报告的玩家,欢迎继续在QQ频道…

    2026年11月1日 • 用户投稿
    100
  • linux apt是什么

    linux apt是什么linux apt是什么linux apt是什么linux apt是什么

    APT是Linux系统下的一个软件包管理工具,可以自动下载、配置、安装二进制或源代码格式的软件包;大部分apt命令必须以具有sudo权限 的用户身份运行。APT最早被设计为dpkg的前端,用于处理deb格式的软件包;现在经过APT-RPM组织修改,APT已经可以安装在支持RPM的系统管理RPM包。 …

    2026年11月1日 • 用户投稿
    100
  • linux tmpfs是什么

    linux tmpfs是什么linux tmpfs是什么linux tmpfs是什么linux tmpfs是什么

    在linux中,tmpfs是指临时文件系统,是一种基于内存的文件系统,可以使用用户的内存或swap分区来存储文件;简单来说,tmpfs主要存储暂存的文件。tmpfs系统的优势:1、动态文件系统的大小;2、拥有闪电般的速度。 本教程操作环境:linux7.3系统、Dell G3电脑。 Tmpfs是什么…

    2026年11月1日 • 用户投稿
    100
  • linux path是什么意思

    linux path是什么意思linux path是什么意思linux path是什么意思linux path是什么意思

    在linux中,PATH是指环境变量,一般是指操作系统中指定操作系统运行环境的一些参数;使用命令“echo $PATH”即可查看当前环境变量,如果需要修改可以在后面进行追加。path配置的路径下的文件可以在任何位置执行,并且可以通过“which 可执行文件”命令来找到该文件的位置。 本教程操作环境:…

    2026年11月1日 • 用户投稿
    100
  • linux 有itoa函数吗

    linux 有itoa函数吗linux 有itoa函数吗linux 有itoa函数吗linux 有itoa函数吗

    linux没有itoa函数;itoa是广泛使用的非标准C语言和C++语言扩展功能,但因为它是一个非标准的C/C++语言功能,因此不能好好的被所有编译器使用;itoa函数的作用是把整数转换成字符串,并返回指向转换后的字符串的指针。 本教程操作环境:linux5.9.8系统、Dell G3电脑。 lin…

    2026年11月1日 • 用户投稿
    000
  • linux etc profile是什么

    linux etc profile是什么linux etc profile是什么linux etc profile是什么linux etc profile是什么

    linux etc profile是linux环境变量的相关文件,在该文件中修改的内容是对所有用户起作用的;linux用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。 本教程操作环境:linux5.9.8系统、Dell G3电脑。 Linux /etc/profile文件详解 l…

    2026年11月1日 • 用户投稿
    100
  • amazon linux是什么

    amazon linux是什么amazon linux是什么amazon linux是什么amazon linux是什么

    amazon linux是由Amazon Web Services提供支持和更新的linux发行版,可以与Elastic Compute Cloud实例结合使用;Amazon Linux AMI的软件包和配置可以提供与Amazon Web Services的紧密集成,许多AWS API工具和Clou…

    2026年11月1日 • 用户投稿
    000
  • linux rpc.statd是什么

    linux rpc.statd是什么linux rpc.statd是什么linux rpc.statd是什么linux rpc.statd是什么

    在linux中,rpc.statd是一个进程,实现了网络状态监控(NSM)RPC协议,通知NFS客户端什么时候一个NFS服务器非正常重启动,语法“/sbin/rpc.statd [-F] [-d] [-?] [-n name ] [-o port ] [-p port ] [-V]”。rpc.sta…

    2026年11月1日 • 用户投稿
    800
  • linux有计算时间的函数吗

    linux有计算时间的函数吗linux有计算时间的函数吗linux有计算时间的函数吗linux有计算时间的函数吗

    linux有计算时间的函数,例如:可获取秒级时间差的函数time()、可获取微秒级时间差的函数gettimeofday()和settimeofday()、可获取纳秒级时间差的函数clock_gettime()等等。 本教程操作环境:linux7.3系统、Dell G3电脑。 下面讲解的是linux中…

    2026年11月1日 • 用户投稿
    000
  • linux sock文件是什么意思

    linux sock文件是什么意思linux sock文件是什么意思linux sock文件是什么意思linux sock文件是什么意思

    linux sock文件是指通过shell编程后形成的套接口文件;socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口;在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面。 本教程操作环境:linux5.9.8系统、Dell …

    2026年11月1日 • 用户投稿
    1100
  • 如何备份Linux用户配置文件 getent命令数据导出技巧

    如何备份Linux用户配置文件 getent命令数据导出技巧如何备份Linux用户配置文件 getent命令数据导出技巧如何备份Linux用户配置文件 getent命令数据导出技巧如何备份Linux用户配置文件 getent命令数据导出技巧

    备份linux用户配置文件的关键在于利用getent命令导出用户和组信息。传统方法是复制/etc/passwd、/etc/shadow、/etc/group文件,但仅适用于本地用户;1. 使用getent命令可从ldap、nis等多源获取信息,执行getent passwd > passwd.…

    2026年11月1日 • 用户投稿
    000
  • linux 组的作用是什么

    linux 组的作用是什么linux 组的作用是什么linux 组的作用是什么linux 组的作用是什么

    linux组的作用是方便归类和管理用户;在linux中,我们是需要一个用户来登录到服务器里面,然后再做相关的操作,并且每个用户拥有一个主组,同时还可以拥有多个附属组。 本教程操作环境:linux5.9.8系统、Dell G3电脑。 linux 组的作用是什么? PPT.CN,PPTCN,PPT.CN…

    2026年11月1日 • 用户投稿
    200
  • 在linux中bc的全称是什么

    在linux中bc的全称是什么在linux中bc的全称是什么在linux中bc的全称是什么在linux中bc的全称是什么

    在linux中bc的全称是“Binary Calculator”,bc是任意精度算术语言提供解释器,用于实现任意精度计算;bc命令首先读取由File参数指定的任一输入文件,然后读取标准输入,其输入文件必须是包含bc命令能读取并执行的命令序列、语句或函数定义的文本文件。 本教程操作环境:linux5.…

    2026年11月1日 • 用户投稿
    000
  • linux 命令 sh 是什么意思

    linux 命令 sh 是什么意思linux 命令 sh 是什么意思linux 命令 sh 是什么意思linux 命令 sh 是什么意思

    linux命令sh是linux中运行shell的命令,是shell的解释器,shell脚本是linux中壳层与命令行界面,用户可以在shell脚本输入命令来执行各种各样的任务。 本教程操作环境:linux5.9.8系统、Dell G3电脑。 linux 命令 sh 是什么意思? linux sh命令…

    2026年11月1日 • 用户投稿
    000
  • composer怎么安装php扩展_说明在composer中安装PHP扩展的操作方法

    composer怎么安装php扩展_说明在composer中安装PHP扩展的操作方法composer怎么安装php扩展_说明在composer中安装PHP扩展的操作方法composer怎么安装php扩展_说明在composer中安装PHP扩展的操作方法composer怎么安装php扩展_说明在composer中安装PHP扩展的操作方法

    Composer不能安装PHP扩展,仅能检查其存在。通过在composer.json中声明ext-gd、ext-curl等依赖,Composer会在运行时验证扩展是否启用,若未启用则报错中断。真正安装需依赖系统工具:Linux使用apt或yum安装对应php-扩展包,macOS通过Homebrew安…

    2026年11月1日 • 用户投稿
    000
  • linux中什么是映像文件

    linux中什么是映像文件linux中什么是映像文件linux中什么是映像文件linux中什么是映像文件

    linux映像文件是指把内存上的数据和存储地址信息存储在一个文件内;比如把硬盘上数据做成一个映像文件,这个文件的内容就是做映像时的那个分区的数据,通过相应的软件可以将映像的内容原封不动地还原回硬盘上。 本教程操作环境:linux5.9.8系统、Dell G3电脑。 linux中什么是映像文件 ? 镜…

    2026年11月1日 • 用户投稿
    000
  • Strix Halo、DGX Spark决战迷你AI工作站!AMD手握三大优势、性能完胜

    Strix Halo、DGX Spark决战迷你AI工作站!AMD手握三大优势、性能完胜Strix Halo、DGX Spark决战迷你AI工作站!AMD手握三大优势、性能完胜Strix Halo、DGX Spark决战迷你AI工作站!AMD手握三大优势、性能完胜Strix Halo、DGX Spark决战迷你AI工作站!AMD手握三大优势、性能完胜

    这几年,生成式ai浪潮方兴未艾,各种应用如雨后春笋,更高级的智能体ai、具身ai也已经崭露头角,显现了无尽的潜力。 但是一个市场领域蓬勃发展时,往往是机遇与挑战并存。如何更好地抓住AI这一波机会,怎么玩才能实现收益最大化,从科技巨头到个人开发者都在思考。 其中,对于小型企业、工作室乃至个人开发者来说…

    2026年11月1日 • 用户投稿
    1000
  • mysql安装及配置超详细教程 附常见错误解决方案

    在这个数据驱动的时代,MySQL作为一种强大的开源数据库管理系统,已成为开发者们手中的利器。今天,我们将深入探讨MySQL的安装与配置过程,并分享一些常见错误的解决方案。我知道,许多初学者在面对这些步骤时可能会感到困惑,但别担心,跟着我走,你将轻松掌握这些技能。 首先,我们得从头开始,谈谈MySQL…

    2026年11月1日
    000
  • composer如何解决”The requested PHP extension xxx is missing”的错误_安装缺失扩展或启用PHP模块

    composer如何解决”The requested PHP extension xxx is missing”的错误_安装缺失扩展或启用PHP模块composer如何解决”The requested PHP extension xxx is missing”的错误_安装缺失扩展或启用PHP模块composer如何解决”The requested PHP extension xxx is missing”的错误_安装缺失扩展或启用PHP模块composer如何解决”The requested PHP extension xxx is missing”的错误_安装缺失扩展或启用PHP模块

    首先确认缺失的扩展名称,如ext-imagick;然后通过php -m检查已加载扩展,使用系统包管理器或PECL安装对应扩展,最后在php.ini中启用并重启服务验证。 当你使用 Composer 安装或更新 PHP 项目依赖时,可能会遇到类似 “The requested PHP ex…

    2026年11月1日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信