今天主要学习进程的相关概念,进程的创建回收,以及相关的api,我觉得最让我难理解的是几个进程是如何在内存中如何操作的,以及内存 内存映射单元与物理空间的相关区分,今天学习的部分其他都还容易理解
1.进程概念
程序:存放在外存中的一段代码集合
进程:是程序动态执行的过程,创建 销毁 调度 消亡
2.进程相关命令
top 根据cpu占用率来查看进程 ps -ef 可用管道命令|搭配grep来检索查看某个进程 pstree 进程树 ps -aux 查看进程运行状态 kill 杀死进程 今天学习时误用为kill 9 进程pid 导致not permittd 正确用法为 kill -9 进程pid killall -9 进程名 ./a.out & 后台执行任务 jobs 查看后台执行任务 fg 编号 将后台任务放到前台执行 *注意:这里的编号不是pid,而是jobs查看后的那个编号 ps 查看终端下的前后台执行的任务 nice -n 优先级 进程任务 renice -n 优先级 进程pid3.进程的创建
1. 32位操作系统下,进程占0 - 4G虚拟内存空间,可以划分为文本段、数据段及系统数据段
1. 文本段:指令
2. 数据段:字符串常量、未初始化全局变量/静态变量、初始化的全局变量/静态变量
3. 系统数据段:堆区、栈区
2.特性
进程空间是独立的,每个进程独享进程空间
所有进程共享0-4G虚拟内存空间
分时复用
4.什么是进程调度
1.操作系统内核,决定下一时刻CPU交给哪个进程去运行
2.进程调度算法
1. 先来先执行,后来后执行
2. 高优先级调度算法
3. 时间片轮转调度算法(宏观并行,微观串行)
4. 多级队列反馈调度算法
5. 负载均衡调度算法
3.时间片
cpu在进程中执行的一小段时间称为时间片
4.进程状态
1. 就绪态(R):没有被CPU轮转到的正在执行的任务
2. 运行态(R):正在被CPU执行的任务
3. 可唤醒等待态(S):由于缺少资源让程序暂时挂起的状态,等待过程中可以被唤醒
4. 不可唤醒等待态(D):等待过程中不会被唤醒称为不可唤醒等待态
5. 停止态(T):由于系统需要让进程任务暂停,则将进程设置为停止态
6. 僵尸态(Z):进程代码执行结束,空间没有被回收
7. 结束态(X):代码执行结束,空间被回收的时刻
5.相关api
fork
pid_t fork(void); 功能: 创建一个子进程空间 参数: 缺省 返回值: 成功父进程中返回子进程的PID 子进程中返回0 失败返回-1getpid
id_t getpid(void); 功能: 返回调用进程的进程ID号 getppid() 功能: 返回父进程的pidexit
void exit(int status); 功能: 进程结束 主函数中调用exit与调用return效果相同 函数体内调用return,函数结束,调用exit让进程结束wait
pid_t wait(int *wstatus); 功能: 回收子进程空间 参数: wstatus:存子进程结束状态空间的首地址 返回值: 成功返回回收到的子进程的PID 失败返回-1 WIFEXITED(wstatus):检测子进程是否正常退出 WEXITSTATUS(wstatus):获得子进程退出时的值 WIFSIGNALED(wstatus):检测子进程是否被信号杀死 WTERMSIG(wstatus):获得杀死信号的编号wait回收子进程空间,避免子进程成为僵尸进程
wait具有阻塞功能,能够实现多任务同步
6.进程的消亡
1.僵尸进程产生原因
进程代码执行结束后,空间没有被回收,就会变成僵尸进程
2.如何避免僵尸进程
1.让父进程先结束,子进程成为孤儿进程,再被init进程收养,子进程结束,最后子进程被init进程回收
2.子进程结束,让父进程回收子进程,就可以有效避免僵尸进程