1.目的:
(1)数据传输:一个进程需要将他的进程数据发送给另一个进程。
(2)资源共享:多个进程之间共享同样的资源。
(3)通知事件:一个进程需要向另一个或一组进程发送消息,通知他们发生了某种事件。
(4)进程控制:有些进程希望完全控制另一个进程的执行(如debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。
2.管道通信
(1)管道是单向的,先进先出,它把一个进程的输出和另一个进程的输入连接在一起;
(2)一个进程在管道的尾部写入数据,另一个进程从管道头部读出数据;
(3)数据被一个进程读出后,将被从管道中删除,其他读进程将不能读到这些数据;
(4)管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞,同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞。
(5)管道包括无名管道和有名管道两种管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。
3.信号通信
信号机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号:
(1)当用户按某些按键时,产生信号;
(2)硬件异常产生信号:除数为0、无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号;
(3)进程用kill函数将信号发送给另一个进程;
(4)用户可用kill命令将信号发送给其他进程。
4.下面是几种常见的信号:
SIGHUP: 从终端上发出的结束信号
SIGINT: 来自键盘的中断信号(Ctrl-C)
SIGKILL:该信号结束接收信号的进程,杀死进程
SIGTERM:kill 命令发出的信号
SIGCHLD:子进程停止或结束时通知父进程
SIGSTOP:来自键盘(Ctrl-Z)或调试程序的停止执行信号,暂停进程
5.信号处理
(1)忽略此信号
大多数信号都按照这种方式进行处理,但有两种信号决不能被忽略,它们是:
SIGKILL\SIGSTOP。
这两种信号不能被忽略的原因是:
它们向超级用户提供了一种终止或停止进程的方法;
(2)执行用户希望的动作通知内核在某种信号发生时,调用一个用户函数。在用户函数中,执行用户希望的处理;
(3)执行系统默认动作
对大多数信号的系统默认动作是终止该进程。