博客
关于我
Linux —— 信号(2)
阅读量:791 次
发布时间:2023-02-01

本文共 1136 字,大约阅读时间需要 3 分钟。

Linux 信号机制

Linux 系统中,信号是操作系统用来报告进程状态改变或外部事件的机制。信号可以从程序、shell命令、系统限制或硬件事件触发。在 Linux 中,很多信号可以自定义处理,关键是要了解哪些信号不可被捕捉。

信号序号

信号编号从 1 开始到 31 为普通信号,34 到 64 为实时信号。这些信号可以用于不同的操作,如终止(SIGTERM,15)、中断(SIGINT,2)、强制终止(SIGKILL,9)等。没有 0 号信号,因为这是用于测试进程的存在和权限的特殊信号。

kill 函数

kill 函数用于向进程发送信号。参数 pid 可以是特定的进程 ID、进程组 ID(小于 -1)、0(当前进程组)、-1(除自己外所有进程),根据错误条件设置错误码。例如:

#include 
#include
#include
int main() { signal(2, signal_handler); // 捕获 SIGINT 信号 kill(getpid(), SIGINT); sleep(1);}

自定义信号处理

使用 signal 函数注册处理函数,定义信号行为。例如,强制终止进程必须使用 kill -9,无法自定义处理,因为这些信号是为了确保系统可靠性。

raise 函数

raise 函数向当前进程发送指定信号,常用于模拟用户操作如 Ctrl+C。注意,某些信号如 SIGKILL 无法被调用。

abort 函数

abort 用于强制终止进程,发送 SIGABRT 信号。适用于不可恢复的错误情况,执行前不会清理资源,进程直接终止。

特定信号处理示例

  • SIGFPE:除以零错误。
  • SIGSEGV:无效指针访问。
  • SIGALRM:定时器触发。

setTimeout 示例

#include 
#include
void signal_handler(int signum) { printf("Caught SIGALRM, count: %d\n", ++count); exit(0);}int main() { signal(14, signal_handler); alarm(1); while (true) { printf("Running pid: %d\n", getpid()); sleep(1); } return 0;}

seo 优化

文章结构清晰,逻辑连贯,适合搜索引擎优化,涵盖关键技术点,语言自然流畅。

转载地址:http://eswfk.baihongyu.com/

你可能感兴趣的文章
Linear线性层
查看>>
linglong扫描系统 JWT密钥硬编码 登录绕过漏洞复现
查看>>
Link Prediction Based on Graph Neural Networks
查看>>
Link&Compile
查看>>
link.exe)用完了堆空间
查看>>
LinkedBlockingQueue比BlockingQueue吞吐量高的原因?
查看>>
LinkedIn工程经理眼中的数据世界格局
查看>>
LinkedList工作原理
查看>>
LinkedList(1):链表介绍和单向链表的实现
查看>>
LinkedList(2):双向链表的实现
查看>>
LinkedList(3):并发异常
查看>>
LinkedList(4):多线程LinkedList 不安全情况
查看>>
linkin大话设计模式--适配器模式
查看>>
LinkSage:基于 GNN 的 Pinterest理解
查看>>
LinkWeChat,唯一以开源为核心的SCRM
查看>>
link和@import的区别
查看>>
link和Import区别
查看>>
link标签中的integrity和crossorigin字段---web前端工作笔记015
查看>>
link标签的rel属性
查看>>
Linly-Talker智能数字人实时对话系统如何部署体验
查看>>