现在最常用的进程间通信的方式有:管道,信号,信号量,消息队列,共享内存。

所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂。机制不同,复杂度也不一样。通信是一个广义上的意义,不仅仅指传递一些massege。
 
  他们的使用方法是基本相同的,所以只要掌握了一种的使用方法,然后记住其他的使用方法就可以了。
 
  1. 信号
  在我学习的内容中,主要接触了信号来实现同步的机制,据说信号也可以用来做其它的事情,但是我还不知道做什么。
 
  信号和信号量是不同的,他们虽然都可用来实现同步和互斥,但前者是使用信号处理器来进行的,后者是使用P,V操作来实现的。
 
  使用信号要先知道有哪些信号,在Linux下有31个需要记住的通用信号,据说也是systemV中最常用的那些。这里略。
 
  1. 1信号相关函数:
  #include
  int sigaction(int signo, const struct sigaction *act, struct sigaction
  *oact);
  该函数用来为进程安装信号处理器,struct sigaction数据是用来保存信号处理器的相关信息。
 
  #include
  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);
  判断某个信号是否在信号集中。返回1则在,0则不在。
 
  #include
  int sigprocmask(int how,const sigset_t *set, sigset_t *oset);用来设置进程的信号屏蔽码。信号屏蔽码可以用来在某段时间内阻塞一些信号集中的信号,如果信号不在信号集中,就不必讨论它,因为肯定不响应,是否能生成也不肯定,我没有做过试验。
 
  1.2我所理解的使用信号机制的方法:
  使用信号,主要做的事情就是信号处理器的工作,这里面是你想做的事情。就像中断处理函数一样。
 
  在使用信号以前,首先要初始化信号集,只有在信号集里面的信号才会被考虑。
 
  有两种方法可以初始化信号集,一种是设置空信号集,一种是将所有的信号都加到信号集中。如果你自己想要的信号集不是这两种,可以在初始化了以后通过添加和删除信号进行定制。
 
  如果在进程执行的一段时间内不想对某些信号进行响应,则可以使用sigprocmask对当前的信号集中的一些信号进行阻塞,稍后再执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值