Linux进程通信

进程间通信不可能发生在用户空间,必须通过内核对象进行。

 

基础知识

  1)linux 通过inode 来区分不同的文件

  2)父子进程的不同点:

    0) fork函数详解 http://blog.csdn.net/jason314/article/details/5640969

    1)在父进程中,fork返回新创建子进程的进程ID;

    2)在子进程中,fork返回0;

       3)如果出现错误,fork返回一个负值;

 

 

一、同一内核中进程通信方式

1.管道

  1)pipe 匿名管道

    匿名管道是单向队列,管道写是入列,读是出列。读写阻塞。

    只能用于父子进程间通信。因为匿名管道在用户空间没有名称,父子进程完全一样,其他进程则无法访问。

  2)mkfifo 命名管道

    命名管道是单向队列。

    没有血缘关系的进程通过相同的名称去访问内核中的管道,从而实现通信

 

2.信号

  信号是已经存在于内核空间对象,有64种信号。用户空间不能发送信号。

  如何使用:

    目前进程ID(PID),信号ID(SID)

  信号的发送

    发送给所有进程:

      kill

    发送给本进程:

      raise

      alarm: 只能发送闹钟信号

      pause

      sleep

  信号的处理

    signal: 设置进程自己信号处理响应

 

    

posted on 2016-01-01 13:06  aoun  阅读(160)  评论(0)    收藏  举报