进程间通信(IPC)

功能:进程间传输数据

原因:在整个操作系统中,进程运行占据内存的内存空间,其它进程是拒绝访问的

通信目的:

(1)数据传输 例:ftp的上传、下载

(2)共享数据 

(3)资源共享 与数据共享的区别:除了能共享数据,还包括硬件共享

(4)通知事件 例:windows中发生错误时,弹出窗口是否发生错误报告

(5)进程控制 例:CPU中各个进程允许,系统出现问题,CPU将当前进程停止,来运行系统进程 (发生事件紧急运行系统程序)

通信手段

(1)信号

功能:给某一个进程加上了一个信号指示,即加了一个标记,CPU会根据进程上的标记做出相应的处理

例:kill这个命令用来给进程发送信号的

kill -l 查看所有的信号类型

kill -9 PID 强制杀死进程

kill -3 PID 提取内存空间的数据(制作线程快照)

(2)管道

功能:将前面命令的输出当做后面命令的输入来用

例:cat /etc/passwd | wc -l

一个进程在管道中存储一份数据由另一个进程来提取

管道提供了简单的流控制机制

采用先进先出的思想(FIFO)即先存的先提取,后存的后提取

管道是一次完整的写读操作,必须先写入再读取,提取完数据之后马上清理空间

[进程阻塞]

发生进程阻塞的两种情况

(1)一次操作不完整 例:cat /etc/passwd I 只有写入没有读取

(2)没有按照既定的顺序执行 例:管道未写入先读取

(3)消息队列

在内存中开辟一块空间,这块空间专门用来记录进程的状态,由进程自己来写入

例:两个进程运行需要访问同一份数据,两个进程不能同时对同一份数据进行写操作,

前进程将自己的运行状态写入到消息队列,后进程等待前进程的状态显示完成再进行。

(4)共享内存

功能类似于管道,用于多进程之间进行数据的共享,在内存中开辟一块空间,存放共享数据

特点:提供了区域编号,能够让不同的进程访问不同的数据,共享数据可以多次访问不清除

(5)信号量

实现进程中不同线程间的通信,帮助协调线程间的通信

(6)socket(套接字)收集 (ip port 协议) 进行引导通信连接

功能:实现网络服务进程间的通信

进程运行过程中的故障:

(1)内存溢出:软件的开发故障

开发人员没有做好预判,在写代码时,规定了数据的最大值,存储时受到了最大值限制,运行中使用空间超过了最大值,这种情况称为内存的溢出

(2)僵尸进程:

进程阻塞

父进程或子进程,由于一方不正常退出,造成其中一方不停止也不运行,即占着内存空间不放,不释放内存空间

(4)内存泄漏:软件开发的故障

进程运行起来占据内存空间,将进程停止,内存空间不释放,第二次运行再占据新的内存空间不释放,以此类推,直到将内存空间占满