嵌入式学习Day28
本文介绍了Linux多任务编程中的进程管理,主要内容包括:1.进程与程序的区别,进程是动态执行的程序实例;2.进程的创建、调度(时间片轮转等算法)和状态转换(运行态、就绪态等);3.Linux进程相关命令如ps、top、kill等;4.进程编程中的fork()创建、exit()退出及wait()回收资源;5.特别说明僵尸进程和孤儿进程的产生与处理。重点阐述了父子进程的内存空间关系及进程生命周期的完
学习完文件操作,今天我们开始学习Linux应用软件编程的第二部分内容:多任务
多任务(并发):让系统具备同时处理多个任务的能力
1.多进程
2.多线程
3.进程间通信
进程:
1.什么是进程?
正在运行的程序,其运行过程中需要消耗内存和CPU
main.c ----> a.out ----> ./a.out
应用程序 可执行程序 正在运行的程序
硬盘 硬盘 内存
*程序和进程有什么区别?
程序:静态的数据集合,存储在硬盘空间
程序运行起来可以产生进程
一个程序可以产生多个进程
进程:是一个程序动态执行的过程,需要消耗内存和CPU
进程具备动态生命周期,从产生到调度再到消亡
一个进程中也可执行多个程序
2.进程的产生
进程产生时,操作系统都会为其分配0-4G的虚拟内存空间
3.进程的调度
CPU:数据处理速度快
宏观并行,微观串行
CPU调度算法
1)时间片轮询算法
2)先来先服务、后来后服务算法(任务队列)
3)短作业优先调度
4)高优先级先执行,低优先级后执行
4.进程的状态
操作系统进程的三态图:

Linux操作系统的进程状态:
1)运行态(用户运行态、内核运行态)R
正在执行,且被CPU任务调度所执行的进程
2)就绪态 R
正在执行,没有CPU任务调度执行的进程(只缺少CPU)
3)可唤醒等待态 S
也称为睡眠态,阻塞等待资源的进程
4)不可唤醒等待态 D
不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态
5)暂停态 T
被暂停执行的进程
6)僵尸态 Z
进程执行结束,空间没有被回收
7)结束态 X
进程执行结束,空间被回收
5.进程的消亡
1)进程执行结束(进程退出)
2)回收进程资源空间
6.进程相关命令
PID:进程的ID号
PPID:父进程ID号
父进程:产生子进程的进程称为父进程
子进程:父进程产生出来的新进程即为该父进程的子进程
1)ps -aux
查看进程相关参数:PID、状态、CPU占有率、内存占有率
ps -aux|grep ./a.out
|:管道:前面命令的输出作为后面命令的输入
grep:字符串查找:在输入中查找和后面字符串相关的数据
2)top
动态查看进程的相关参数:CPU占有率、内存占有率
3)ps -ef
查看该进程的ID和父进程的ID
4)pstree
查看进程的产生关系
pstree -p
查看进程的产生关系(有PID号)
pstree -sp 进程PID号
查看某个指定的进程的产生关系
5)kill -信号的编号/信号的名称 PID
向进程发送信号,让进程的状态发生变化
kill -l
查看系统支持的信号
结束一个进程:
kill -9 PID
kill -SIGKILL PID
killall -9 进程名称
+前台进程
后台进程
jobs
查看当前终端的后台进程
fg 后台进程编号
让后台进程切换成前台进程
7.进程相关编程
1)进程创建:fork()
getpid():获取当前进程自己的PID号
getppid():获取当前进程的父进程的PID号
2)进程调度:操作系统完成
3)进程消亡:
①进程退出:return、exit()相关函数
②回收资源空间:wait()、waitpid()
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
功能:通过拷贝父进程产生一个新的子进程
子进程完全拷贝父进程0-3G的虚拟内存空间
子进程拷贝父进程PCB块(进程控制块)中的部分内容,但PID不拷贝
返回值:
>0:父进程,是子进程的PID号
==0:子进程
-1:出错
注意:
①子进程完完整整拷贝父进程0-3G虚拟内存空间
②父子进程栈区、数据、文本区、堆区完全独立,数据不共享
③要想共享数据,需要使用进程间通信方式实现
进程退出:return、exit()相关函数
1)main中return
2)exit()、_exit():结束一个进程
exit(0):正常退出
exit(非0):由于进程产生了某种问题,需要主动退出进程
回收资源空间:wait()、waitpid()
僵尸进程:进程退出后,但其资源空间未被父进程回收
如何避免僵尸进程产生:
1.子进程退出后,父进程及时为其回收资源空间
2.让该进程成为一个孤儿进程,结束时被操作系统中的系统进程回收
孤儿进程:父进程先消亡,其对应的子进程成为一个孤儿进程,会被系统进程所收养
更多推荐



所有评论(0)