首页
会员中心
到顶部
到尾部
计算机

Linux 进程间通信的理解与编程实践

时间:2020/10/27 9:20:33  作者:  来源:  查看:0  评论:0
内容摘要:         Linux系统可以看作是各种进程组成的,进程之间彼此竞争,通过通信相互协调,独立实现各种功能。深入学习和理解进程间各种通信机制及其实现方式,是编写Linux程序,开发Linux应用的...

         Linux系统可以看作是各种进程组成的,进程之间彼此竞争,通过通信相互协调,独立实现各种功能。深入学习和理解进程间各种通信机制及其实现方式,是编写Linux程序,开发Linux应用的基础。
1、进程间通信及其方式
        所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂。机制不同,复杂度也不一样。通信是一个广义上的意义,不仅仅指大批量数据传送,还包括控制信息的传送,它们的使用方法是基本相同的。Linux支持传统的UNIX-IPC机制,即信号和管道,也支持SystemV的IPC机制,即共享内存、信号量和消息队列。所有SystemV IPC对象都包括ipc_perm数据结构,参见include/linux/ipc.h。SystemV消息在ipc/msg.c中实现,共享内存在ipc/shm.c中实现,信号灯在ipc/sem.c中实现。信号源码参见/kernel/signal.c,管道源码参见/fs/pipe.c。
1.信号 (Signals)
        信号是Unix系统中使用的最古老的进程间通讯的方法之一,用于向一个或多个进程发送异步事件的信号。Linux下的信号可以类比于DOS下的INT或者是Windows下的事件。在有一个信号发生的时候,相应的信号就会发送给相应的进程。Linux的信号有SIGHUP、 SIGINT 、 SIGQUIT 、SIGILL等三十几个(可以通过kill –l命令查看)。 信号事件的发生有两个来源:一个是硬件原因(比如我们按下了键盘),一个是软件原因(比如我们使用系统函数或者是命令发出信号)。 最常用的四个发出信号的系统函数是kill、 raise、 alarm和setitimer函数。信号用来实现同步机制,信号和信号量是不同的,他们虽然都可用来实现同步和互斥,但前者是使用信号处理器来进行的,后者是使用P、V操作来实现的。
1.1信号相关函数:
      int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);为进程安装信号处理器,struct sigaction数据结构是用来保存信号处理器的相关信息。int sigemptyset(sigset_t *set);将信号集合清空。int sigfillset(sigset_t *set);将信号集合设置成包含所有的信号,在对信号进行操作以前一定要对信号集进行初始化。int sigaddset(sigset_t *set, int signo);向信号集中加入signo对应的新信号。int sigdelset(sigset_t *set, int signo);从信号集中删除signo对应的一个信号。int sigismember(const sigset_t *set, int signo);判断某个信号是否在信号集中。int sigprocmask(int how,const sigset_t *set, sigset_t *oset);设置进程的信号屏蔽码。信号屏蔽码可以用来在某段时间内阻塞一些信号集中的信号。
 

Tags:Linux



相关评论
广告联系QQ:45157718 点击这里给我发消息 电话:13516821613 杭州余杭东港路118号雷恩国际科技创新园  网站技术支持:黄菊华互联网工作室 浙ICP备06056032号