为啥要进行进程之间的通信,因为进程是独立资源分配的单元,但不同的进程之间需要进行信息交互,与状态的传递
linux下IPC机制的分类:管道、信号、共享内存、消息队列、信号量、套接字
命名管道:
1.如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。2.命名管道是一种特殊类型的文件
命名管道与匿名管道之间的唯一区别就是创建与打开的方式不同,匿名管道用pipe函数进行创建并打开,命名管道用fifo函数进行创建,open函数打开.
fd[2]用于保存文件描述符 fd[0] 为读端 fd[1]为写端
共享内存:所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。
SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并Core Dump
什么是core dump: 当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存在磁盘上,文件名通常是core,这叫做Core Dump
信号的产生:
1.通过终端按键产生
阻塞信号:
被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作
每个信号都有两个标志位分别表示阻塞(block)和未决(pending),还有一个函数指针表示处理动作。信号
产生时,内核在进程控制块中设置该信号的未决标志,直到信号递达才清除该标志。在上图的例子
中,SIGHUP信号未阻塞也未产生过,当它递达时执行默认处理动作。
SIGINT信号产生过,但正在被阻塞,所以暂时不能递达。虽然它的处理动作是忽略,但在没有解除阻塞之前
不能忽略这个信号,因为进程仍有机会改变处理动作之后再解除阻塞。
线程拥有的自己的数据:线程id 一组寄存器 栈 error 信号屏蔽字 调度优先级
互斥(0/1)决定进程是否可以访问临界资源,同步{同步计算的数是资源的数量}(可以>1也可以小于0,小于0代表着有几个进程在等待队列中)决定进程是否加入等待队列.