linux进程

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

一、进程基础概念

  1. 进程定义
    进程是程序的运行实例,是操作系统分配CPU、内存资源的实体;静态存放在磁盘的是程序,加载到内存动态运行的才是进程。
    公式:进程 = 内核PCB结构体(Linux为task_struct)+ 程序代码与数据。
  2. PCB进程控制块task_struct
    内核用结构体完整记录进程所有属性,系统内全部进程以双向链表统一管理。
    内部核心信息:PID/PPID、运行状态、优先级、程序计数器、CPU寄存器上下文、内存映射指针、IO文件信息、资源记账数据。
  3. 进程查看方式
  • 文件接口:/proc伪文件系统,存储实时进程信息;
  • 命令:ps aux、ps axj、top;
  • 代码系统调用: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号进程会自动回收孤儿,无内存泄漏风险。
相关推荐
左手の明天2 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
꯭自꯭闭꯭2 小时前
达梦SQL优化相关
linux·运维·数据库·sql
一条破秋裤3 小时前
Linux 共享内存通信:POSIX 共享内存与 mmap
linux·运维·服务器
谷哥的小弟5 小时前
CentOS Stream浴火重生
linux·运维·centos
程序员-Benothing5 小时前
Shell输入输出详解:read、echo、printf、颜色输出
linux·运维·服务器
FPGA小徐6 小时前
从 NEMU 到 AbstractMachine:程序、运行时环境与 AM 完全解析
linux·运维·服务器
qetfw7 小时前
Debian Chrony 时间同步、RAID5 与 LUKS 磁盘加密配置
linux·debian
东城居士10 小时前
Linux驱动阻塞与非阻塞访问的理解
linux·嵌入式系统
..Dauntless..10 小时前
【Linux】进程地址空间初步理解
linux·运维·服务器
Julien200410 小时前
Docker 网络(一)
linux·运维·服务器·ssh·学习方法