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号进程会自动回收孤儿,无内存泄漏风险。
相关推荐
重生的黑客15 小时前
Linux 进程程序替换与自定义 Shell:从 exec 函数族到命令行解释器
linux·运维·服务器·shell
北极糊的狐15 小时前
阿里云服务器-命令2-Linux 系统实时资源监视器 top 命令详解(进程级实时资源监控)
linux·运维·服务器
三言老师16 小时前
clear与history历史命令管理实操
linux·运维·服务器·网络·centos
味悲17 小时前
Linux 环境下 DNS 服务器搭建
linux·运维·服务器
dok1217 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (7)open,release (8) write read
linux
皮卡狮17 小时前
进程间通信:认识匿名管道和进程池实现
linux
feasibility.17 小时前
wsl安装Ubuntu方法(含网络不稳定处理)
linux·运维·windows·ubuntu
湿滑路面18 小时前
硅基聊天室——如何用supervisor优雅的管理服务进程
linux·前端·python
我命由我1234519 小时前
Windows 操作系统 - 符号链接
linux·运维·windows·系统架构·操作系统·运维开发·系统