
为什么要进程间通信
进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。
但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信( IPC:Inter Processes Communication )。
进程间通信的目的
- 数据传输:一个进程需要把它的数据传输给另一个进程
- 资源共享:多个进程之间共享同样的资源
- 通知事件:一个进程需要向另外一个进程或一组进程发送消息,通知他们发生了某种事情(例如进程终止要通知父进程)
- 进程控制:有些进程希望完全控制另一个进程的执行(如DEBUG进程),此时控制进程希望能够拦截另一个进程所有陷入和异常,并能够及时知道他们的状态改变。
管道
$ ps auxf | grep mysql
< | > 竖线就是管道,功能是将前一个命令的输出作为后一个命令的输入。可以看出,管道的数据传输是单向的,如果想互相通信,需要创建两个管道。
上述是匿名管道,使用完就要销毁。
还有一个类型是命名管道,也被叫做FIFO,因为数据是先进先出的传输方式。
使用命名管道需要用mkfifo创建,并命名。
mkfifo mypipe
因为linux下一切皆文件,所以可以使用ls -l查看:

类型文件是P,即管道。
向管道中写入数据:
echo "hello" > mypipe
发现命令停


282

被折叠的 条评论
为什么被折叠?



