Linux高并发服务器开发(三)进程


1 程序和进程

程序是存放在存储介质上的一个可执行文件,进程是程序执行的过程。进程的状态是变化的,包括进程的创建、调度和消亡。程序是静态的,进程是动态的。

进程是管理事务的基本单元

进程拥有自己独立的处理环境(需要用到哪些环境变量、程序的目录在哪里,当前是哪个用户在运行此程序)和系统资源(CPU占用率、存储器、I/O设备、数据、程序)。

公司相当于操作系统,部门相当于进程,公司通过部门来管理(操作系统通过进程管理)各个部门中的员工。

并行(真正的一起执行)和并发(在短时间内切换使用资源,造成一起执行的错觉)

在这里插入图片描述

2 MMU 内存管理单元

CPU用于管理虚拟内存和物理内存之间的映射
在这里插入图片描述

3 进程控制块PCB

进程运行时,内核为每一个进程分配一个PCB,用于维护进程的相关信息,Linux内核的进程控制块是task_struct

在这里插入图片描述

4 进程的状态(重点)

在这里插入图片描述

这张图可以不背了解一下
在这里插入图片描述
查看进程状态 ps aux

在这里插入图片描述

5 进程相关命令

ps

在这里插入图片描述
在这里插入图片描述
top 和ps -a差不多

kill 杀进程,
kill pid
在这里插入图片描述

在这里插入图片描述
有些进程不能直接杀死 需要 kill -9 pid
在这里插入图片描述

6 进程号和相关函数

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 进程的创建

在这里插入图片描述
从一个已存在的进程中创建一个新进程
在这里插入图片描述
会输出两个helloworld
子进程不会调用fork函数,会在fork下面那条语句开始执行。避免重复执行

在这里插入图片描述
PC指针,指向下一跳指令
在这里插入图片描述

8 父子进程的关系

在这里插入图片描述
在这里插入图片描述
写时拷贝,读时共享
读时共享,父子进程如果没有改数据,则父子进程都会共享一个空间,没有必要拷贝在自己的空间里。即有相同的文件描述符,和共同的文件偏倚指针。
写时拷贝,如过父子进程需要更改数据,则会拷贝到自己的空间,然后进行更改。

9 区别父子进程

通过pid进行区分
在这里插入图片描述
在这里插入图片描述

10 父子进程的地址空间

读时共享,写时拷贝

在这里插入图片描述
在这里插入图片描述
valgrind 检查内存泄漏
valgrind ./a.out
在这里插入图片描述
子进程需要分配一次,释放两次
在这里插入图片描述

11 GDB调试多进程

在这里插入图片描述

12 进程退出函数

在这里插入图片描述
在这里插入图片描述

13 等待子进程退出函数

在这里插入图片描述
使用wait 和waitpid 释放子进程
在这里插入图片描述
等待任意一个子进程结束
使用wait时进程会挂起,直到收到子进程退出或者收到一个不能忽视的信号
调用进程没有子进程,就立即返回,若子进程结束,函数会立即返回,并且回收所有资源。
wait()主要用于回收已经结束的子进程的资源。
如果status不为null,就会把子进程退出时的状态存在satus中,。
在这里插入图片描述
status的宏
在这里插入图片描述
在这里插入图片描述
waitpid 不阻塞
wait 阻塞

14 孤儿进程和僵尸进程

在这里插入图片描述
在这里插入图片描述

15 进程替换

在这里插入图片描述
exec 函数组
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
不会打印hello world,因为进程已经被替换成ls的main函数
在这里插入图片描述
在这里插入图片描述

剩下的了解即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值