【Linux】————信号
作者主页: 作者主页
本篇博客专栏:Linux
创作时间 :2024年11月12日
信号和信号量
首先说明这两者之间没有任何关系
信号:信号是在软件层次对中断机制的一种模拟,是一种异步通知机制,用于通知进程发生了某个特定的事件,例如当用按下Ctrl+c时,会产生一个SIGINT信号发送给当前正在运行的进程,通知他用户想要进行中断操作。信号既可以由操作系统内核发送给进程,也可以由进程发送给进程(需要一定的权限)
信号量:信号量是一种用于进程同步和互斥的机制,用于协调多个进程或者线程对共享资源的访问。它本质上就是一个计数器,用于控制同时访问共享资源的进程或线程的数量。信号量表示当前可用资源的数量。
信号
我们可以通过kill -l来查看所有的信号。
这些信号中,1-31为普通信号,34及以上为实时信号,这些信号都在什么条件下产生,默认的处理动作是什么,这些都在signal(7)中有着详细的说明man 7 signal
基本结论:信号就是Linux系统提供给用户用于向指定进程发送特定事件的方式
信号的产生和进程是异步的,即进程也不知道自己什么时候会接收到信号
信号是可以随时产生的,如果进程坐着别的事,也可以先不处理信号,等待合适的时机再处理信号
信号的处理
信号处理有三种情况:
- 默认动作
- 忽略动作
- 自定义处理——信号的捕捉
信号捕捉
signal
运行上面代码,在另一个终端上输入kill -2 指令,数字也可换成对应的宏名称。发现输出了hander函数的内容。
signal是用来进行信号捕捉的。参数1是信号的编号,参数2是函数指针。如果进程收到参数1对应的信号,就会执行参数2对应的方法。
我们也可以同时对多个信号进行捕捉:
信号的产生
信号产生的方式:
- 通过kill命令,向指定进程发送命令
- 键盘可以产生信号,Ctrl+c(SIGINT),Ctrl+(SIGQUIT)
- 系统调用
- 软件条件
- 异常
系统调用
kill
参数1是指定进程,参数2是指定信号,作用是向指定进程发送指定信号
本文地址:https://www.vps345.com/7519.html