进程间通信(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)内存泄漏:软件开发的故障
进程运行起来占据内存空间,将进程停止,内存空间不释放,第二次运行再占据新的内存空间不释放,以此类推,直到将内存空间占满