栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux中的信号是什么?

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux中的信号是什么?

什么是信号?
  • 操作系统信号,英文signal,简称信号。
  • 是IPC中唯一一种异步的通信方法。
  • 它的本质是用软件来模拟硬件的中断机制。
  • 信号用来通知某个进程有某个事件发生了。例如,在命令行终端按下某些快捷键,就会挂起或停止正在运行的程序。另外,通过kill命令杀死某个进程的操作也有信号的参与。
信号的表示方式?
  • 每一个信号都有一个以“SIG”为前缀的名字,例如SIGINT,SIGQUIT,SIGKILL等等。
  • 在操作系统内部,这些信号都由正整数表示,这些正整数称为信号编号。
如何查看操作系统的所有信号?

在Linux操作系统中,通过kill -l来查看所有的信号。

信号如何分类?
  • Linux支持的信号有62种。注意:没有编号为32和33的信号。
  • 编号从1到31的信号属于标准信号。
  • 编号从34到64的信号称为实时信号。
标准信号存在什么问题?

对于同一个进程来说,每种标准信号只会被记录并处理一次。
如果发送给某一个进程的标准信号有多个,他们的处理顺序是不确定。

为什么要有实时信号?
  • 实时信号解决了标准信号的两大问题。同种类的实时信号都可以记录在案,并且他们可以按照信号的发送顺序被处理。
  • 已成为事实的标准信号无法被替换,所有标准信号和实时信号共存。
信号的来源有哪些?
  • 键盘输入,比如ctrl+c
  • 硬件故障
  • 系统函数调用
  • 软件中的非法运算
响应信号的方式有哪些?
  • 忽略
  • 捕捉
  • 执行默认操作
进程响应信号的默认方式有哪些?
  • 终止进程
  • 忽略该信号
  • 终止进程并保存内存信息
  • 停止进程
  • 恢复进程(若进程已停止)
不能自行处理和忽略的信号有哪些?
  • SIGKILL和SIGSTOP这两种信号不能被自行处理,也不能被忽略,对它们的操作只能是系统默认操作。
  • 根本原因是为了向系统超级用户提供使进程终止或停止的可靠方法。
  • 这种保障不论对应用程序还是操作系统来说,都是非常有必要的。
示例1:忽略进程信号
package main

import (
	"fmt"
	"os"
	"os/signal"
)

func main() {
	// 创建一个管道,是Notify的第一个参数的类型
	sigRecv := make(chan os.Signal, 1)
	
	// 发送通知
	signal.Notify(sigRecv)
	
	// 从管道中读取信号
	for sig := range sigRecv {
		fmt.Printf("Received a signal: %sn", sig)
	}
}
示例2:取消通知
package main

import (
	"fmt"
	"os"
	"os/signal"
)

func main() {
	// 创建一个管道,是Notify的第一个参数的类型
	sigRecv := make(chan os.Signal, 1)
	
	// 发送通知
	signal.Notify(sigRecv)
	
	// 从管道中读取信号
	for sig := range sigRecv {
		fmt.Printf("Received a signal: %sn", sig)
		
		// 取消
		signal.Stop(sigRecv)
		close(sigRecv)
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号