C语言-进程

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回收子进程空间)

相关推荐
酷爱码2 分钟前
在 Linux 中修改 Apache HTTP Server(httpd)默认端口的完整指南
linux·http·apache
happyh h h h p p p p2 分钟前
部署DNS从服务器
运维·服务器·网络
jiunian_cn5 分钟前
【Linux】Linux权限
linux·服务器·mysql
betazhou27 分钟前
有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
linux·数据库·mysql·oracle·mariadb
情系淮思29 分钟前
客户端和服务器已成功建立 TCP 连接【输出解析】
服务器·网络·tcp/ip
烟雨书信1 小时前
Linux中MySQL的逻辑备份与恢复
linux·运维·mysql
wkj0011 小时前
QuaggaJS 配置参数详解
java·linux·服务器·javascript·quaggajs
藥瓿亭2 小时前
K8S认证|CKS题库+答案| 5.日志审计
linux·运维·docker·云原生·容器·kubernetes·cka
coder_lorraine2 小时前
【Linux系列】Linux用户大揭秘:从“公寓住户”到“社区管理员”的奇幻之旅
linux
家庭云计算专家2 小时前
飞牛云一键设置动态域名+ipv6内网直通访问内网的ssh服务-家庭云计算专家
运维·云计算·ssh·nextcloud·ddns·动态域名解析