非正常结束:自己或者别的进程发送终止信号
二.进程的环境 1.环境变量 操作系统中的全局变量,所以程序都可以进行访问 export,查看环境变量 2.每一个进程中都有一份所以环境变量的表格 当前进程中可以直接使用的这些环境变量-》environ变量指向字符串数组 3.获得环境变量的方法 getnev
clearenv 删除当前系统中的环境变量
三.进程进行的虚拟地址空间 每个进程都在独立的空间中运行,彼此互不干扰也互不看见 意义: 1.进程隔离:让进程之间彼此看不见--》安全性 2.提供多进程的运行:可以再动态运行时可以装软件 四.进程的引入 1.进程是动态的 2.进程是程序的一次执行过程 可以执行的程序每执行一次,就是一次进程 进程模块:PCB 内核中专门用来管理进程的一个数据结构。 进程控制块里面包含包含这个进程的各个记录。 进程id号:就是一个数字,相当于操作系统给这个进程分配的一个数字编号,来唯一的标识进程。 结果分析: 1.进程id号从1开始,0号进程为内核进程,
2.有的进程是连续的,有的进程存在时间很短,消亡后再分配就会跳过
五.如何获得进程 getpid:获得当前进程号
getppid:获得当前进程的父进程
六.多进程调用原理
操作系统的复制性就是多进程引起的——》操作系统设计复杂就是为了多线程
七.os中进程的调度原理 1.‘先来先运行’ 2.时间片轮询 3.短任务优先执行 4.优先级调度
5.其他调度算法
八.小结 1.虽然子进程创立后,父子进程就变成了独立的个体,但还是有联系的。 2.父进程在没有fork之前所做的事情对子进程影响很大。但在fork之后在自己的if语句中无影响。
3.子进程的目的使,独立的运行另处的程序。
九.进程的消亡与诞生 消亡:需要处理 进程运行时要消耗资源:内存
内存是进程os申请的,消亡时资源释放,不回收资源,容易造成资源泄漏。
十.僵尸进程和孤儿进程 僵尸进程:子进程比父进程先结束【谁创建谁回收】 1.向os申请的资源【os回收】 2.进程本身的资源【父进程回收】 清理内容:task-struct和栈内存 手段:wait和waitpid 孤儿进程:父进程比子进程先结束 linux:中孤儿进程变成特殊进程(init 1号进程)的字进程 父进程回收子进程:wait waitpid 工作原理: 1.子进程结束时,系统会向父进程发个信号: 2.父进程调用wait函数后阻塞 3.父进程被信号唤醒,然后回收僵尸进程
4.如果父进程没有任何子进程则wait返回错误
十一.wait 和 waitpid 基本功能相同,waitpid可以回收指定的pid的子进程,wait可以接收任何id的子进程。 waitpid可以采用2种模式阻塞和非阻塞。
wait是阻塞的。
十二.exec函数族 父子进程中的执行的是执行代码,代码太长不好控制,无法执行一些命令。
引入exec函数族,通过exec可以执行可执行文件
十三.system函数 system = fork + exec 好处:不会打断,不会引来竞争关系
坏处:占用太对cpu,影响别的进程的执行
十四.进程的状态 1.就绪态 2.执行态 3.僵尸态 4.等待态
4.暂停态
十五.守护进程 daemon:后面加.d,基本上就是守护进程 特点: 1.长期运行
2.与控制台脱离,一般进程与控制台绑定
十六.进程间通信
很少用,开销大
十七.管道
管道和有名管道,默认为无名管道。 管道通信: 单双工: 数据流动只能从一端到另一端 半双工: 一会从这端到另一端,一会从另一端到这段(潮汐车道) 全双工: 双向流动 有名管道: 使用makefilo创建的,然后再两个进程分别用open打开获得fd,一个读一个写,通过文件名将两个联系在一起。 共享内存: 消息队列;克服管道只能传输无格式的字节流。本质就是链表。
十八.线程 简介: 1.是一个轻量级的线程,脱胎于进程,都可以参与操作系统的调用 2.参与操作系统调用的最小单元,也就是os调用其实是线程 与进程的关系: 1.进程中可以有很多线程 2.如果进程消亡,进程中的线程也会消亡 3.线程消亡,不影响进程以及进程中的其他线程 为什么要有线程? 通信效率高