Linux -- 进程

进程

printf 缓冲区

  • 缓冲区不立即输出,满足以下条件才刷新:

    1. 缓冲区满

    2. 强制刷新

    3. 进程结束

  • 换行符\n自动刷新缓冲区

进程退出函数

函数 头文件 特点 适用场景
exit() stdlib.h 先清理资源、刷新缓冲区,再退出 单进程、普通程序
_exit() unistd.h 直接内核退出,不刷新缓冲区 子进程、多进程

Exit()终止逻辑:

先执行用户态的资源清理操作,在调用内核实现终止逻辑

  1. 刷新并关闭标准I/O流(强制刷新缓冲区的数据(加了\n)时,缓冲区内容会被输出到终端或文件中)

  2. 清理私有资源,释放进程占用的用户态内存(堆内存,全局变量内存)

  3. 调用 _exit() 触发内核回收

_Exit()终止逻辑:

是系统调用,会跳过用户态的所有操作,直接通知内核终止进程

普通单进程程序:优先使用exit()

多进程例如父子进程() 子进程优先使用_exit();

main 函数参数

复制代码
int main(int argc, char *argv[], char *envp[])
  • argc:参数个数

  • argv:参数内容数组

  • envp:系统环境变量数组

程序 vs 进程

  • 程序:静态代码文件,不占运行资源

  • 进程:程序的动态执行过程,占用 CPU / 内存

fork () 创建子进程

  • 头文件:#include <unistd.h>

  • 返回值:

    • 父进程:返回子进程 PID

    • 子进程:返回0

    • 创建失败:返回 -1(比如内存不足,系统进程数达到上限),设置error表示错误原因(perror查看出错原因)

  • 特点:调用一次,返回两次,父子进程代码相同、数据独立。

僵死进程 & 孤儿进程

  1. 僵死进程

    子进程先结束,父进程未回收资源,子进程变为僵尸(占用 PCB)。

  2. 孤儿进程

    父进程先结束,子进程被

    系统 init/systemd

    收养,不会僵尸。

进程三状态

  • 运行态:正在占用 CPU

  • 就绪态:准备好,等待 CPU

  • 阻塞态:等待资源 / 事件,暂时不参与调度

wait () 函数

  • 作用:阻塞父进程 ,等待并回收子进程资源,防止僵尸进程

写时拷贝

  1. 核心定义

    写时拷贝 (Copy-On-Write,COW):延迟拷贝,只有在真正修改内存页时才执行拷贝,未修改页全程共享,是高效的内存共享与复制策略。

  2. 为什么需要 COW

  • 不使用 COW:fork()全量复制父进程代码段、数据段、栈、堆,严重浪费 CPU 与内存带宽。

  • 使用 COW:父子进程先共享同一块物理内存,仅修改时才拷贝,避免无效复制。

  1. 核心规则
  • 读:共享内存,不拷贝。

  • 写:触发拷贝,分配新物理页,各自独立。

相关推荐
szephyr20 分钟前
Docker + Compose 实战:把本地项目一键搬到云服务器,附完整配置
运维·docker·容器·部署·云服务器
wdfk_prog31 分钟前
ros教程02:创建 catkin Workspace、Package 与第一个 ROS1 C++ Node
运维·缓存·docker·容器·ros
亚川楼宇自控系统数据中心厂家1 小时前
高校 / 医院 / 政务云数据中心 IBMS 系统怎么落地?
运维
陈陈CHENCHEN2 小时前
【Linux】服务器根目录磁盘扩容操作记录
linux·运维·服务器
GeW3 小时前
RHCE快速拿证全攻略:考点拆解+实验强化+时间规划,一次通关
linux
见闻小天地3 小时前
从晶片工艺到可靠性验证:晶威特TF-3215型RTC晶振全面解析
运维·业界资讯
沸速存储4 小时前
AI 机器人靠哪些内存与存储驱动整机运行?
服务器·科技·嵌入式硬件·电脑
码农小韩4 小时前
Linux应用开发(八)——TCP/IP网络编程基础
linux·嵌入式软件开发·linux操作系统·嵌入式操作系统·linux网络编程·linux应用
迷途之人不知返4 小时前
【进程】-5-进程优先级
linux
名字还没想好☜4 小时前
Docker 网络实战:bridge/host/none/自定义网络、容器互通与端口映射踩坑
运维·docker·kubernetes