golang 处理 Linux 系统信号

发布于 2024-10-17 17:30:18 字数 2282 浏览 7 评论 0

Linxu 系统信号列表

信号动作说明
SIGHUP1Term终端控制进程结束(终端连接断开)
SIGINT2Term用户发送 INTR 字符(Ctrl+C) 触发
SIGQUIT3Core用户发送 QUIT 字符(Ctrl+/) 触发
SIGILL4Core非法指令(程序错误、试图执行数据段、栈溢出等)
SIGABRT6Core调用 abort 函数触发
SIGFPE8Core算术运行错误(浮点运算错误、除数为零等)
SIGKILL9Term无条件结束程序(不能被捕获、阻塞或忽略)
SIGSEGV11Core无效内存引用(试图访问不属于自己的内存空间、对只读内存空间进行写操作)
SIGPIPE13Term消息管道损坏(FIFO/Socket 通信时,管道未打开而进行写操作)
SIGALRM14Term时钟定时信号
SIGTERM15Term结束程序(可以被捕获、阻塞或忽略)
SIGUSR130,10,16Term用户保留
SIGUSR231,12,17Term用户保留
SIGCHLD20,17,18Ign子进程结束(由父进程接收)
SIGCONT19,18,25Cont继续执行已经停止的进程(不能被阻塞)
SIGSTOP17,19,23Stop停止进程(不能被捕获、阻塞或忽略)
SIGTSTP18,20,24Stop停止进程(可以被捕获、阻塞或忽略)
SIGTTIN21,21,26Stop后台程序从终端中读取数据时触发
SIGTTOU22,22,27Stop后台程序向终端中写数据时触发

Linux 中信号处理

Linux 中, raise 库函数可以发送特定的信号给当前进程。

Signal handler 可以通过 signal() 系统调用进行设置。如果没有设置,缺省的 handler 会被调用,当然进程也可以设置忽略此信号。

有两种信号不能被拦截和处理: SIGKILLSIGSTOP

当接收到信号时,进程会根据信号的响应动作执行相应的操作,信号的响应动作有以下几种:

  • 中止进程(Term)
  • 忽略信号(Ign)
  • 中止进程并保存内存信息(Core)
  • 停止进程(Stop)
  • 继续运行进程(Cont)

用户可以通过 signalsigaction 函数修改信号的响应动作(也就是常说的 注册信号)。 另外,在多线程中,各线程的信号响应动作都是相同的,不能对某个线程设置独立的响应动作。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

梦行七里

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

雨幕

文章 0 评论 0

alipaysp_XIzGSod4b1

文章 0 评论 0

许强

文章 0 评论 0

别理我

文章 0 评论 0

败给现实

文章 0 评论 0

淡淡の花香

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文