系统编程之进程

一,定义

进程是一个程序执行的过程,会去分配内存资源,cpu的资源。

1.PCB是一个结构体,process control block。系统用于描述正在运行的进程的相关(所有)信息。

2.pcb常见内容

PID,进程标识符

当前工作路径 chdir

umask 0002

进程打开的文件列表 文件IO中有提到

信号相关设置 处理异步io,

用户id,组id

3.进程的资源限制

打开文件的个数1024 ,栈的大小8M

二,进程和程序的区别

1.程序:静态

存储在硬盘中代码,数据的集合

进程:动态

程序执行的过程,包括进程的创建、调度、消亡

.c ----> a.out-----> process(pid)

1)程序是永存,进程是暂时的

2)进程有程序状态的变化,程序没有

3)进程可以并发,程序无并发

4)进程与进程会存在竞争计算机的资源

5)一个程序可以运行多次,变成多个进程

一个进程可以运行一个或多个程序

2.虚拟内存

1.基于隔离性。在多进程中,a进程不能访问b进程的内存空间。

2.安全性(权限管理),linux也是运行在内存上的。所以需要通过权限控制,访问内核(linux系统)。

不是任意随意访问内核。

3.进程的内存空间

4.进程的分类

(1)交互式进程 进程运行后需要用户的输入,在给出对应的输出

(2)批处理进程 shell脚本 批量执行命令

(3)守护进程 进程会自动运行,默认不需要输入,处于休眠状态。等到特定条件满足。自己开始

运行。(更新进程,杀毒软件)

三,状态切换图

在操作系统中,在一个时间段内同时运行多个任务的能力。

操作系统的进程状态切换图

linux的进程状态切换图

四,系统的调度

在linux系统中,需要运行的任务(进程)有多个,每个都想运行。但是CPU,只有一个。所以就需要

linux 合理安排下一时刻,那个进程运行。

常见调度算法: 时间片轮转 ,短任务优先,进程优先级。 完全公平调度算法(CFS)。

宏观并行,在一个时间段中,每个进程都在运行。 微观串行,在时间的某一刻, 只有一个进程在

运行。

进程上下文切换 ,当a.out 的cpu的时间片耗尽是,就需要运行b。out。 a.out需要把自己的状态信

息(pcb,硬件上一些寄存器,PC. 内存相关数据)缓存到硬盘上。当a.out把内存释放出来后,b.out就

可以把自己前进缓存在硬盘的数据,读入内存。然后开始运行。

命令:

ps aux 显式所有的进程相关信息

top linux 中的任务管理器

kill 发信号

kill -9 pid 关闭指定pid的进程

killall -9 a.out 关闭多个a.out

相关函数

复制代码
pid_t fork()
创建一个子进程。
一次调用,会返回两次。
子进程先运行和是父进程先进程,顺序不确定。变量不共享。
子进程复制父进程的0到3g空间和父进程内核中的PCB,但pid号不同。
功能:通过该函数可以从当前进程中克隆一个同名新进程。
克隆的进程称为子进程,原有的进程称为 父进程。
fork成功后,父子进程使用相同的代码段。父子进程开始运行的地方有所差异。
子进程是父进程的完全拷贝。
子进程的执行过程是从fork函数之后执行。
子进程与父进程具有相同的代码逻辑。
返回值:int 类型的数字。
在父进程中:成功 返回值是子进程的pid号 >0
失败 返回-1;
在子进程中:成功 返回值 0

fork成功后,父子进程使用相同的代码段。父子进程开始运行的地方有所差异。

复制代码
获得pid相关的函数
getpid
pid_t getpid(void);
功能:
获得调用该函数进程的pid
参数:
缺省
返回值:
进程的pid
getppid parent
pid_t getppid(void);
功能:
获得调用该函数进程的父进程pid号
参数:
缺省
返回值:
返回父进程id号
相关推荐
HLC++12 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室14 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy16 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕17 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫18 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生18 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1119 小时前
linux基础IO
linux·运维·服务器
BelongPanda21 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯1 天前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_777998341 天前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器