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 优化

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

上一篇:Linux —— 信号(3)
下一篇:Linux —— 信号量

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年05月01日 23时18分21秒