☰
Day5-Linux软件编程(进程与线程(1))
2026/11/2 1:38:41 网站建设 项目流程

今天主要学习进程的相关概念,进程的创建回收,以及相关的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 优先级 进程pid

3.进程的创建

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 失败返回-1

getpid

id_t getpid(void); 功能: 返回调用进程的进程ID号 getppid() 功能: 返回父进程的pid

exit

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.子进程结束,让父进程回收子进程,就可以有效避免僵尸进程

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询