C语言-进程

news/2025/2/21 10:57:45/

1、进程是什么?

        一个具有一定独立功能的程序关于某个数据集合的一次运行活动(程序执行的过程),

        是系统进行资源分配和调度运行的基本单位。是动态的,随着程序的使用被创建,随着

        程序的结束而消亡。

        什么是程序:一组可以被计算机直接识别的 有序 指令 的集合。是静态的

                                通俗讲:C语言编译后生成的可执行文件就是一个程序。

        注意:每一个程序运行时,操作系统分配给进程的 是虚拟内存,意味着每一个进程所使

        用的空间都是虚拟内存, 虚拟内存会被单元管理模块(MMU)映射到物理内存上,如何

        映射是操作系统关心的事情,程序开发者不用关心。

2、常见的命令

        top

                根据CPU占用率查看所有进程任务

                PID:唯一识别进程ID号(PID>0)

                PPID:父进程的ID

                q退出top命令

        ps -ef

                命令用于显示系统中所有的进程,并提供详细的进程信息

                ps -ef | grep <process_name>:查找某个特定的进程。例如,要查找

                                                所有包含 apache 的进程,可以使用 ps -ef | grep apache

        ps -aux

                ps aux 是另一个常用的命令,用于查看系统中所有的进程。

                它与 ps -ef 命令的功能相似,都会显示系统中的所有进程,但输出格式稍有不同。

                可以查看进程状态

        pstree 

                用于以树状结构显示进程的父子关系。从而可以直观地看到各个进程之间的父子关系。

        kill

                用于终止进程。它通过发送信号来控制进程的行为,最常用的信号是

                SIGTERM (15),它要求进程优雅地终止,但有时也使用 SIGKILL (9) 来强制终止进程。

                kill -9 进程的PID

                kill -9 进程名

3、进程的创建

        在32为操作系统中,会为进程开辟0-4G的虚拟空间

        64位可以创建比较庞大的

        分为

                文本段:存放代码和指令

                数据段:

                        存储全局变量,静态变量,字符串常量

                        在编译时候分配空间,程序运行时,将可执行文件数据段加载到内存数据段

                        程序结束回收数据段空间

                        未经初始化的指为0

                系统数据段:

                        栈区:操作系统管理的区域,存放局部变量,执行到变量时候分配空间,超过变量

                                        作用域时回收变量空间,未经初始化为随机值

                        堆区:程序员管理的区域        

                        内核:操作系统的核心区域,用户无法访问,负责内存管理,CPU管理,硬件

                                 设备管理,进程管理,文件系统管理

4、多个进程的存储

        1、进程空间是独立的

        2、单核:一个CPU在同一时刻只能进行一个任务

        3、宏观执行,微观单行

        4、物理地址空间是独立的,虚拟地址空间共用一份,所以多个进程并不是虚拟地址空间相加

 

        5、进程的调度

                1、宏观并行,微观串行

         2、进程的状态

                R 就绪态:正在运行的任务(没有占用CPU)
                R 运行态:正在运行的任务(占用CPU)
                S 可唤醒等待态:进程挂起等在某个资源到达后继续向下执行
                D 不可唤醒等待态:进程任务挂起直到等到某个信号继续向下执行
                T 暂停态:进程任务挂起,直到CPU发送指令才能继续向下执行
                Z 僵尸态:代码已经执行完毕,空间仍然存在
                X 结束态:代码执行完毕,空间被回收

        3、CPU调度任务规则(进程调度算法)

                1、一个任务执行完毕后如何选择下一个

                2、常见的进程调度算法

                        先来先执行,后来后执行

                        高优先级调度算法

                        时间片轮转调度算法

                                时间片:CPU在某个进程任务中执行的一段时间

                        多级队列反馈

                        负载均衡调度算法

        4、进程相关接口

                1、fork

man 2 fork
pid_t fork(void);
功能:
创建一个子进程
参数:
缺省
返回值:
成功在父进程中返回创建的子进程的PID
在子进程中返回0
失败返回-

                2、exit

man 3 exit
void exit(int status);
功能:
刷新缓存区,并让进程结束
参数:
status:进程结束的状态
返回值:
缺省
man 2 _exit
void _exit(int status);
功能:
进程直接结束
参数:
status:进程结束的状态
返回值:
缺省

6、进程的消亡

        1、什么是僵尸进程

                进程执行结束,空间没有被回收,就会成为僵尸进程

        2、如何避免产生僵尸进程

                让父进程先结束,子进程会成为孤儿进程,被init进程收养,子进程结束时,

                init进程回收子进程空间
                子进程结束,父进程回收子进程空间(wait或者waitpid回收子进程空间)


http://www.ppmy.cn/news/1573863.html

相关文章

Stack和Queue—模拟实现,实战应用全解析!

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 大家好&#xff0c;我们今天来学习java数据结构的Stack和Queue&#xff08;栈和队列&#xff09; 一&#xff1a;栈 1.1&#xff1a;栈的概念 …

迪威模型网:免费畅享 3D 打印盛宴,科技魅力与趣味创意并存

还在为寻找优质3D打印模型而发愁&#xff1f;快来迪威模型网&#xff08;https://www.3dwhere.com/&#xff09;&#xff0c;一个集前沿科技与无限趣味于一体的免费3D打印宝藏平台&#xff01; 踏入迪威模型网&#xff0c;仿佛开启一场未来科技之旅。其“3D打印”专区&#xff…

【OpenCV】OpenCV 中各模块及其算子的详细分类

OpenCV 的最新版本包含了 500 多个算子&#xff0c;这些算子覆盖了图像处理、计算机视觉、机器学习、深度学习、视频分析等多个领域。为了方便使用&#xff0c;OpenCV 将这些算子分为多个模块&#xff0c;每个模块承担特定的功能。 以下是 OpenCV 中各模块及其算子的详细分类&…

“深入浅出”系列之QT:(10)Qt接入Deepseek

项目配置&#xff1a; 在.pro文件中添加网络模块&#xff1a; QT core network API配置&#xff1a; 将apiUrl替换为实际的DeepSeek API端点 将apiKey替换为你的有效API密钥 根据API文档调整请求参数&#xff08;模型名称、温度值等&#xff09; 功能说明&#xff1a; 使…

后台管理系统-月卡管理

功能说明并准备静态结构 <template><div class"card-container"><!-- 搜索区域 --><div class"search-container"><span class"search-label">车牌号码&#xff1a;</span><el-input clearable placeho…

GCC头文件搜索顺序详解

在C/C编程中&#xff0c;合理管理头文件的引入路径对于项目的组织至关重要。GCC编译器提供了灵活的机制来指定头文件的搜索路径&#xff0c;这主要通过#include "…"和#include <…>两种形式实现。本文将详细介绍这两种形式的区别以及如何使用-I参数优化头文件…

代理和NAT多路转接

1.NAT技术背景 在IPv4协议中存在IP地址数量不充足的问题&#xff0c; NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能。 NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法: 很多学校, 家庭, 公司内部采用每个终端设…

嵌入式0xDEADBEEF

在嵌入式系统中&#xff0c;0xDEADBEEF 是一个常见的“魔数”&#xff08;magic number&#xff09;&#xff0c;通常用于调试和内存管理。它的含义和用途如下&#xff1a; 1. 调试用途 未初始化内存的标记&#xff1a;在调试时&#xff0c;0xDEADBEEF 常用于标记未初始化或已…