本文将带你从零开始攻克Linux进程核心概念。无论你是否接触过操作系统,都能轻松理解进程控制块、PID、fork等关键术语。让我们开始吧!
想象你写了一个C程序hello.c,编译后得到a.out。这个文件躺在磁盘里,它就是程序——静态的指令集合。当你双击运行它,或者在终端输入./a.out,操作系统会把它加载到内存,分配资源,并安排CPU执行。这一刻,它变成了Linux进程。
程序是静止的(磁盘文件),进程是动态的(执行活动)。程序可以复制到另一台机器仍叫程序,而进程总是与特定的环境(PID、内存空间、打开文件)绑定。一个程序可以启动多个进程(例如打开3次浏览器),每个进程都有自己独立的进程控制块。
内核如何管理上百个进程?答案是:每个进程对应一个进程控制块(PCB)。在Linux源码中,它就是task_struct结构体。里面存放了:
每个Linux进程诞生时都会被赋予一个正整数——PID(Process ID)。你可以通过getpid()获得它。同时,每个进程都有一个父亲,父进程的ID称为PPID(Parent PID),通过getppid()获取。在终端输入ps -ef就可以看到所有进程的PID/PPID关系。
除了0号进程手工启动,其他所有Linux进程都是通过fork()系统调用产生的。fork会复制当前进程,生成几乎一模一样的子进程。子进程拥有独立的进程控制块和PID,但从父进程继承了代码、数据、堆栈。
pid_t pid = fork();if (pid == 0) { // 子进程:fork返回0 printf("我是子进程,PID=%d", getpid());} else if (pid > 0) { // 父进程:fork返回子进程PID printf("我是父进程,子进程PID=%d", pid);} else { // fork失败 perror("fork error");} 注意:fork调用一次,返回两次,这是它的神奇之处!
运行中的Linux进程不总是在占用CPU。Linux内核定义了多种状态:R(运行)、S(可中断睡眠)、D(不可中断睡眠)、Z(僵尸)、T(暂停)等。通过ps aux可以查看每个进程当前状态。
✅ Linux进程是程序的一次动态执行 ✅ 每个进程有一个进程控制块(PCB)——task_struct ✅ PID是进程的唯一标识,PPID是父进程ID ✅ fork()用于创建新进程,父子进程从此分叉
——《Linux进程概念(上)》· 下篇预告:进程调度与僵尸进程 ——
本文由主机测评网于2026-02-12发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260224899.html