博客
关于我
Linux —— 信号(2)
阅读量:792 次
发布时间: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/

你可能感兴趣的文章
Linux df du 命令
查看>>
Linux DHCP服务器
查看>>
Linux DNS服务器子域授权、转发器和转发域配置实例(三)
查看>>
Linux Docker 部署 Jenkins 详解教程
查看>>
Linux Driver 入门 - Allocating Device Numbers
查看>>
LINUX du/df/free查看内存/磁盘剩余空间
查看>>
linux dump 文件在哪
查看>>
linux echo设置颜色
查看>>
LINUX errno
查看>>
Linux find 匹配文件内容
查看>>
Linux find命令使用详解
查看>>
Linux firewalld防火墙常用
查看>>
Linux free命令详解(转)
查看>>
Linux GCC常用命令总结
查看>>
linux git pull/push时不用输入账号密码的设置
查看>>
Linux git 操作免账号/密码配置方式
查看>>
linux grep使用以及grep使用练习
查看>>
Linux grep正则表达式学习笔记
查看>>
Linux HA Cluster-Corosync+Pacemaker
查看>>
linux hosts和hostname
查看>>