Linux,和现代的UNIX实现一样,提供了许多机制来实现IPC,包括:
(1)signals, (信号)暗示这个时间发生。
(2)pipes 管道, (熟悉shell用户的人知道 | 操作) 和FIFO, 它用于在不同进程之间传送数据。
(3)sockets 。 网络通信。
(4)file locking, 文件锁。 为了防止另外的进程读或者更新文件内容,我们需要锁住此文件的区域。
(5)message queues, 消息队列。 用于在不同进程之间交换信息。
(6)semaphores, 信号量。 用于同步进程活动。
(7)shared memory. 分享库。 更多的进程分享一片内存。当一个进程改变了分享库的内容的时候,另外一些也随之改变。
一. 信号量
信号量是由内核,另外的进程(相应的权限),进程本身发送到进程。比如,内核可以在下列情况下发送信号到此进程:
(1)用户输入终结字符(通常是Control-C).
(2)一个进程的孩子之一结束。
(3) 时间过期
(4) 进程企图进入非法的内存地址。
接收到信号量的进程可能做如下操作:
(1)忽略此消息。
(2)被此信号量杀死
(3) 挂起,知道特定的信号来恢复状态。
二.线程
由于线程共享了进程的环境,包括属性和虚拟内存。每一个线程都执行同一个程序并分享同一个数据区域和堆栈。但是每一个线程都有自己的栈,用来保存本地变量和函数调用信息。
线程通信是通过分享的全局变量,API提供了条件变量和mutexes, 保证了通信和同步。
三. 会话,控制终端和控制线程
会话是进程组的集合(相当于任务)。 在一个会话中的所有进程都有同一个会话认证。session leader 是创建这个会话的进程,它的的ID变成了会话ID。
会话主要用于任务控制shells. 就是相当于我打开一个控制终端,那就这就是一个会话。
四. Pseudoterminal 为终端
伪终端是一对连接的虚拟设备,被认为是主和奴的关系。设备配对提供了一个可以双向传数据的通道。 伪终端的表现像一个中断,它使用了另外的一个程序连接到真正的终端。如X Window System , telnet 和ssh
五. 两种时间对进程来说是有用的
(1)实时时间
(2)进程时间
六. /proc 文件系统
如同其它UNIX实现,Linux提供了/proc文件系统,它组成了许多挂在到/proc目录下的目录和文件。这个文件系统是虚拟俄文件系统,提供对内核数据结构的接口。它提供了一种简单的机制来查看和改变不同的系统属性。另外,所有的目录都以PID的形式存在,允许用户查看每个运行在系统的进程信息。/proc文件的内容是可读的,也可以由shell脚本识别, 程序可以简单的打开,读,写等操作。 大部分情况下,进程有权利修正文件的内容。