TCP/IP,Linux中使用信号量控制运行中的进程,绑定信号量和处理函数,信号量会打断sleep的休眠状态
一、Linux中使用信号量对进程的调控:
1、信号量是一个int值,由操作系统在特定情况下发送给进程,进程收到信号量后会做出响应,例如程序员在Linux中的进程运行时输入Ctrl+c,操作系统就会向该进程发送一个SIGINT信号量,该进程捕获到该信号量,会执行默认的中断退出的功能。
2、进程在捕获到信号量后自定义处理函数,可以使用signal函数绑定信号量和处理函数,使用signal将可能收到的型号量与特定的处理函数绑定起来,这样程序在绑定了信号量处理函数后,在接受到操作系统发送的信号量时,就会调用被绑定的函数,而不是默认的处理函数。
二、signal函数声明
1、signal函数和处理函数:
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
2、处理函数:
是一个入参为int信号量,返回void的函数指针,命名上没有要求,按照命名规范来就可以,例如:
void keycontrol(int sig)
{
if(sig == SIGINT)
puts("CTRL+C pressed");
}
三、信号量举例
1、SIGINT信号量对应操作系统的Ctrl+c,这个信号量一般可以中断进程,但是被进程接受并调用了特定函数后,就不再具有强行中断进程的作用。
2、SIGALRM信号量也可以中断进程,被接收后失去中断作用,可以通过alarm(int secs)定时获取SGALRM信号量。
四、进程中使用signal将信号量和处理函数绑定案例
int main()
{
signal(SIGINT,keycontrol);
for(int i = 0;i<5;i++)
{
puts("waiting...");
sleep(10);
}
return 0;
}
在进程休眠中按Ctrl+c,就可以调用函数keycontrol在屏幕上打印字符,信号量会中断进程的休眠状态。
五、运行结果:
进程中连续按下5次Ctrl+c,均被进程捕获并做出响应,信号量中断了sleep,没有默认的中断进程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)