linux进程通信

编程入门 行业动态 更新时间:2024-10-09 01:24:21

linux<a href=https://www.elefans.com/category/jswz/34/1771450.html style=进程通信"/>

linux进程通信

常见的中断信号:
会发现一个规律,前32种信号会有各种不同的名称,后32种会以“SIGRTMIN”或者“SIGRTMAX”开头,前者是从unix继承下来的信号,称为不可靠信号(也称为非实时信号),后者为了解决“不可靠信号”的问题进行了更改和扩充的信号形成了可靠信号(也称为实时信号)

如果想要了解可靠与不可靠信号,需要了解信号的生命周期:

一个完整的信号周期可以分为三个重要阶段,三个重要阶段有四个重要事件刻画的:信号产生,信号在进程中注册,信号在进程中注销,执行信号处理函数
信号处理周期:

在进程中可以注册对应信号的回调:
#include <signal.h>
signal(SIGTERM, signalHandlerShutdown);
signal(SIGHUP, signalHandlerShutdown);
signal(SIGUSR1, signalHandlerShutdown);
signal(SIGQUIT, signalHandlerShutdown);
signal(SIGINT, signalHandlerShutdown);
signal(SIGKILL, signalHandlerShutdown);
signal(SIGSEGV, signalHandlerShutdown);

一但内核信号产生,就会调用回调函数signalHandlerShutdown

发送信号的函数主要有kill(),raise(),alarm(),pause()
(1)kill()和raise()
kill()函数和熟知的kill系统命令一样,可以发送信号给信号和进程组(实际上kill系统命令只是kill函数的一个用户接口),需要注意的是他不仅可以终止进程(发送SIGKILL信号),也可以向进程发送其他信号.
与kill函数不同的是raise()函数允许进程向自身发送信号。
(2)alarm()和pause():
alarm()-----也称为闹钟函数,可以在进程中设置一个定时器,等到时间到达时,就会想进程发送SIGALARM信号,注意的是一个进程只能有一个闹钟时间,如果调用alarm()之前已经设置了闹钟时间,那么任何以前的闹钟时间都会被新值所代替
pause()----此函数用于将进程挂起直到捕捉到信号为止,这个函数很常用,通常用于判断信号是否已到

下面的一个实例实现了sleep()函数的功能:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{int ret = alarm(5) ;//设置一个定时器pause() ;//捕捉定时器信号,收到信号之前会一直阻塞printf("I have been waken up\n", ret) ;
}      

这个函数中的printf是不会执行的,因为定时器发送的SIGARAM的默认处理是终止程序,所以程序打印之前程序已经结束了,与sleep不同的是sleep是不会退出的

更多推荐

linux进程通信

本文发布于:2024-03-13 01:05:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732832.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:进程   通信   linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!