Linux信号处理的一般方法

本文探讨了在程序中如何处理各种信号,如SIGTERM、SIGINT等,并介绍如何通过独立线程使用sigwait来避免主线程阻塞。此外还讨论了信号处理函数中应避免使用的库函数类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主线程阻塞一些信号,创建独立线程使用sigwait去获得这些信号,对他们调用自己的信号处理函数

主要有 

SIGTERM(kill命令产生) : 存储并同步(到磁盘)程序的重要数据,释放资源、程序退出

SIGINT SIGUSR1 SIGUSR2:自定义操作或同上

SIGPIPE(像对端关闭的管道或socket写入时产生,不处理程序退出): 忽略

SIGHUP(终端退出产生,不处理程序退出): 忽略

SIGCHILD(子进程退出产生,默认忽略): waitpid 防止子进程退出后变为僵尸进程


另外信号处理函数尽量不要调某些库函数,像printf()和malloc()之类的标准库函数,它们会使用全局的数据(比如malloc()需要使用进程的堆数据结构)是不可重入的,即使加锁也无法解决,加锁可以使得库函数Tread-safe,但是无法解决可重入。

SIGKILL(kill -9产生) SIGSTOP 不能捕获

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值