
Linux —— 信号(2)
发布日期:2025-04-06 07:50:35
浏览次数:8
分类:精选文章
本文共 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 优化
文章结构清晰,逻辑连贯,适合搜索引擎优化,涵盖关键技术点,语言自然流畅。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月01日 23时18分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux LVM 逻辑卷管理
2025-04-06
Linux LVM学习总结——创建卷组VG
2025-04-06
Linux LVM最难懂的5个核心概念,零基础入门到精通,收藏这一篇就够了
2025-04-06
linux mac地址老化时间,bridge网桥表老化时间设置
2025-04-06
Linux Mint 各个版本的差异:Cinnamon、MATE 和 Xfce
2025-04-06
linux mongo是否启动命令行,Linux下Mongodb安装和启动配置
2025-04-06
Linux mount命令怎么用?
2025-04-06
Linux mount挂载命令
2025-04-06
linux mysql insert_Linux编程 - 使用C在MySQL中插入数据
2025-04-06
linux mysql备份
2025-04-06
linux mysql实现读写分离
2025-04-06
Linux Netfilter实现机制和扩展技术
2025-04-06
Linux Netfilter框架之conntrack连接跟踪机制
2025-04-06
Linux netstat 命令:打印网络连接情况
2025-04-06
Linux NetworkManager网络服务详解
2025-04-06
Linux NFS存储服务介绍与参数说明
2025-04-06
Linux NFS服务器的安装与配置详解
2025-04-06
Linux NFS自动挂载autofs配置
2025-04-06
linux nmap 使用
2025-04-06