IPC:( interprocess communication ) 进程间通信的简称
Unix进程间的信息共享可以有多种方式:
1)两个进程共享留存于文件系统中的某个文件上的某些信息,为访问信息,进程必须穿过内核(read write lseek等),当文件更新时,某种形式的同步是必要的,可以保护多个写入者,防止相互串扰,也可以保护一个或多个读出者,防止写入者的干扰
2)共享留存于内核的某些信息,管道是这类共享的一个例子,System V 消息队列和 System V信号量也是,现在访问共享信息的每次操作都涉及对内核的一次系统调用
3)共享内存区,进程一旦设置好该共享内存区,就可以不涉及内核的进行访问数据
线程间的IPC:如果管道为空,调用线程就阻塞在它的read上,直到某个线程往该管道写入数据
IPC对象的持续性:
1)岁进程持续的IPC:一直存在到打开着改对象的最后一个进程关闭该对象为止,例如管道和FIFO
2)随内核持续的IPC:一直存在到内核重新自居或者显式删除该对象。如System V的消息队列,信号量和共享内存区,Posix的消息队列,信号量和共享内存区至少是随内核持续的,也可以是随文件系统持续的,具体要看其实现
3)随文件系统持续的IPC:一直存在到显式删除,即使中间有内核自举,它依然保持其值,Posix消息队列,信号量和共享内存区如果是使用映射文件实现的,那么就是随文件系统持续的
当两个或者多个无亲缘关系的进程使用某种类型的IPC对象彼此交换信息时,必须有一个某种形式的名字name或者标识符identifier,这样其中一个进程可以创建改IPC对象,其余进程可以指定同一个IPC对象
管道没有名字,不能用于无亲缘关系的进程间通信
FIFO有一个在文进系统中的Unix路径作为标识符,可以作为无亲缘关系的进程间通信