1.进程
进程是程序的一次动态执行;
进程是程序执行和系统资源管理的最小单位,存在资源的分配;
2.程序
程序是若干指令的集合;
程序是静态存储在文件中;
3.进程控制块
保存创建进程的信息;
4.进程号和进程状态
系统标识进程;S阻塞 Z 僵尸 R运行
5.进程的分类
1.交互进程:由shell创建,依赖于终端,
终端退出,进程退出;
2.批处理进程:不受终端控制。进入队列,顺序执行
3.守护进程:在后台运行,独立于终端,
6.进程的拷贝
子进程对父进程进行的地址资源的基本全部拷贝;
(数据段,代码段(fork后),缓冲区);
各个进程拥有独立的虚拟地址空间0-4G;
7.Fork函数理解
Fork父进程执行一次,但是操作系统会给父子进程不同的返回值;
8.孤儿进程
父进程先于子进程退出;被init收养;
9.终止进程
Exit; _exit; return (main);fflush缓冲区区别
10. 僵尸进程defunct(Z)
子进程已经退出,父进程没有回收子进程的资源PCB(进程控制块);
11. 阻塞非阻塞
阻塞:信号的唤醒;等待进程退出,回收子进程资源;
非阻塞:立即返回,时刻轮询;
12. 退出状态返回wait
Wait返回保存子进程exit退出时的退出状态;
Exit()退出状态;
实际编程时,可以通过wait系统调用接收子进程的退出状态,来进行相应的处理。
13. Wait和waitpid
Wait阻塞父进程等待任意子进程结束,返回结束进程的进程号
Waitpid
Waitpid(-1,int *status,0);=== wait(int *status)
非阻塞:
如果没有等到结果,则返回0;
如果等到,则返回退出进程的PID
14. Exec函数族(概念)
通过调用exec函数来取代原有进程的数据段,代码段,堆栈段来执行另外一个程序。
在形式上实现了程序间的调用;
15. Exec函数的总结
1.可执行文件的查找方式 :
带路径execl/execv
省略路径execlp/execvp
指定路径execle/execve
2.参数的传递v
Char * 列举; char * [] 指针数组;
3.环境变量的使用e
指定环境变量,可执行文件的查找路径
16. 进程的内存空间
进程的虚拟内存是操作系统在逻辑上假想的一片内存
进程的虚拟内存只会在程序实际运行过程中,需要被访问到的部分被映射到实际的物理内存,映射通过页表的实现;虚拟内存空间大,只是代表了他能访问的内存空间比较大,不带表他占用的实际的物理内存大;通过TOP命令来查看;进程之间通过。
进程的内存图