进程
1、进程的概念
- (1)程序:是一段存放在外存中代码的集合(死的)
- (2)进程:是一个程序动态执行的过程,包括创建、调度、消亡(活的)
2、进程的创建
进程创建后,操作系统为进程分配独立的4G虚拟空间
进程空间包括:
1.文本段(.text)
存储代码和指令
2.数据段
1.字符串常量区
.rodata
2.未初始化静态变量/全局变量
.bss
3.已初始化静态变量/全局变量
.data
3.系统数据段
1.堆区
程序员手动管理区域
程序员负责申请(malloc)释放(free)
堆区增长方向自低向高
2.栈区
操作系统管理区域
操作系统负责申请释放
栈区增长方向自高向低
4.内核区域
1.CPU管理
2.内存管理
3.文件系统管理
4.硬件设备管理
5.进程管理
3、进程创建关系
父子进程:
父进程:创建新进程的进程称为新进程的父进程
子进程:被创建的进程称为原进程的子进程
内核进程
init进程
所有进程任务
pstree
4、进程相关命令
1.top
根据CPU占用率查看进程信息
q 退出
PID:进程的ID号(唯一)
PPID:父进程的ID号
2.ps -ef
查看当前时刻进程信息
3.ps -aux
查看进程状态
4.pstree
查看进程关系
5.kill
kill -9 进程PID
killall -9 进程名
6.jobs
查看后台执行任务
7.fg 编号
让一个后台执行的任务放到前台执行
8.nice
按照优先级运行进程任务
9.renice
重新设定进程任务的优先级
5、进程调度:
保障多个任务能同时执行
宏观并行
多个任务同时向下执行
微观串行
CPU在多个任务中快速切换,保障多个任务同时向下执行
中断:
进程调度算法:
1.先来先执行,后来后执行
2.短作业优先
3.高优先级调度算法
4.时间片轮转调度算法
5.多级队列反馈调度算法
6.负载均衡调度算法
时间片:CPU在一个任务中执行的一段时间
6、进程状态:
1.运行态 R
正在执行,且被CPU任务调度所执行的进程
2.就绪态 R
正在执行,没有CPU任务调度执行的进程
3.可唤醒等待态 S
也称为睡眠态,阻塞等待资源的进程
4.不可唤醒等待态 D
不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态
5.暂停态 T
被暂停执行的进程
6.僵尸态 Z
进程执行结束,空间没有被回收
7.结束态 X
进程执行结束,空间被回收
7、进程相关接口:
1.fork
pid_t fork(void);
功能:
创建一个子进程空间
参数:
缺省
返回值:
失败返回-1
成功父进程中返回子进程的PID
子进程中返回0
2.getpid
获得调用进程的pid
3.getppid
获得调用进程父进程的pid,
创建一个父进程的2个子进程,在两个子进程中打印自己的PID和父进程的PID
在父进程中打印自己的PID和两个子进程的PID
异步:
执行顺序没有任何联系
同步:
在某一时刻,任务具有先后执行的顺序关系
4.exit
void exit(int status);
功能:
进程结束
参数:
进程结束的状态
返回值:
程序结束没有返回
5._exit
void _exit(int status);
功能:
进程结束
参数:
进程结束的状态
返回值:
程序结束没有返回
6.atexit
int atexit(void (*function)(void));
功能:
注册退出注册函数
参数:
function:函数指针
返回值:
成功返回0
失败返回-1
8、僵尸进程如何产生?
僵尸进程:进程执行结束,空间没有被回收
如何产生:子进程运行结束,父进程没有回收子进程空间
如何避免产生僵尸进程:
1.可以使用wait或waitpid回收子进程空间
2.让父进程先结束,子进程后结束
孤儿进程:当前进程的父进程结束,当前进程称为孤儿进程,父进程会变成init进程(1号进程)
9、进程的回收:
wait
pid_t wait(int *status);
功能:
回收子进程空间
参数:
status:存放子进程结束状态空间首地址
返回值:
成功返回回收到子进程的PID
失败返回-1
阻塞等待
实现同步功能
WIFEXITED(status)
检测进程是否正常结束
WEXITSTATUS(status)
获得进程结束时返回的值
WIFSIGNALED(status)
检测进程是否被信号杀死
WTERMSIG(status)
获得杀死进程的信号编号
经验之谈
(1)如果在子进程创建之前,定义一个指针,那么在父进程和子进程中,这个指针指向的地址是一样的。
作业
1.创建一个父进程和9个子进程,父进程中打印自己的PID和所有子进程的PID
子进程中打印自己的PID和父进程的PID
2.编写ps的命令查看当前操作系统所有进程任务的信息
PID PPID USER GROUP STAT COMMAND
/proc
纯数字的文件夹都对应一个进程