linux进程

进程基础、进程创建fork、进程状态

一、进程基础概念

  1. 进程定义
    进程是程序的运行实例,是操作系统分配CPU、内存资源的实体;静态存放在磁盘的是程序,加载到内存动态运行的才是进程。
    公式:进程 = 内核PCB结构体(Linux为task_struct)+ 程序代码与数据。
  2. PCB进程控制块task_struct
    内核用结构体完整记录进程所有属性,系统内全部进程以双向链表统一管理。
    内部核心信息:PID/PPID、运行状态、优先级、程序计数器、CPU寄存器上下文、内存映射指针、IO文件信息、资源记账数据。
  3. 进程查看方式
  • 文件接口:/proc伪文件系统,存储实时进程信息;
  • 命令:ps auxps axjtop
  • 代码系统调用:getpid()获取自身PID、getppid()获取父进程PID。

二、进程创建:fork系统调用

  1. 核心功能
    fork是Linux底层创建子进程的系统调用,完整复制父进程生成全新独立子进程。
  2. 复制机制:写时拷贝COW
    刚创建完成时父子进程共享同一份物理内存;只有任意进程修改数据时,系统才单独分配物理内存副本,大幅降低内存开销。
  3. 特殊返回规则(调用1次,返回两次)
  • 返回值>0:当前为父进程,返回数字是子进程PID;
  • 返回值=0:当前为子进程;
  • 返回值=-1:进程创建失败(内存不足、系统进程数达上限)。
  1. 父子进程特性
    共享内容:代码段、文件描述符、环境变量、虚拟地址布局;
    相互独立:PID编号、CPU上下文、堆/全局数据(修改后物理内存分离);
    运行规则:父子并发执行,CPU调度顺序不确定。
  2. 经典组合 fork + exec
    fork仅复制原有程序,exec可以替换子进程程序镜像;终端执行命令、多进程服务端都依赖这套机制。

三、Linux七大进程状态

  1. R运行态:正在CPU运行,或在就绪队列等待调度;
  2. S可中断睡眠:等待某事件,能被信号唤醒;
  3. D不可中断睡眠:等待磁盘IO,无法被信号打断;
  4. T停止态:收到SIGSTOP暂停,SIGCONT恢复运行;
  5. t追踪停止:调试器ptrace调试时暂停;
  6. X死亡态:进程资源完全释放,内核销毁PCB,用户无法观测;
  7. Z僵尸态:子进程退出,但父进程未读取退出信息,PCB保留在内核。

四、僵尸进程、孤儿进程

1. 僵尸进程(Z)

  • 产生条件:子进程先结束,父进程持续运行但不调用wait/waitpid回收;
  • 危害:PCB长期占用内核内存,大量僵尸进程会引发内存泄漏;
  • 解决方案:父进程使用wait/waitpid回收子进程退出状态。

2. 孤儿进程

  • 产生条件:父进程提前退出,子进程失去父进程;
  • 处理规则:自动被系统1号进程(systemd/init)收养,1号进程会自动回收孤儿,无内存泄漏风险。
相关推荐
动力 continue17 小时前
Linux 基础篇 · 压缩打包与用户管理
linux·服务器·基础命令linux
NJCloud19 小时前
Ansible(三)——Zabbix 监控系统部署与敏感信息加密
linux·运维·chrome·信息可视化·ansible·zabbix
ltl19 小时前
Cgroups v2:为什么内存限制设了,宿主机数据库还是被 OOM
linux
NJCloud19 小时前
TiDB 集群部署与 MySQL 兼容性适配实战
linux·运维·数据库·mysql·tidb
2401_8685347819 小时前
UNIX常用命令英文全称与中文解释整理
linux·运维
阿祖zu20 小时前
开源项目-让本地 Codex 临时接管远程 Linux 服务,实现快速运维
linux·gpt·agent
Android系统攻城狮1 天前
Linux PipeWire深度解析之pw_factory_create_object调用流程与实战(七十二)
linux·音频进阶·pipewire音频进阶
lsh曙光1 天前
playbook剧本(2)--Ansible变量
linux·运维·网络
lengjingzju1 天前
编译与调试完全指南—第14章 系统配置与调优
linux
大鹏的NLP博客1 天前
通用 Linux 嵌入式板端 C/C++ ABI 与 Glibc 依赖治理规范
linux·c++·交叉编译