Linux 进程学习笔记
一、什么是 Linux 进程?
进程(Process)是 Linux 系统中正在运行的程序实例,是操作系统进行资源分配和调度的基本单位。每个进程都有独立的地址空间、文件描述符和运行状态,多个进程可以并发执行,共同完成复杂任务。
二、为什么需要学习 Linux 进程?
学习 Linux 进程管理有以下几个好处:
- 理解系统运行机制:知道程序如何被加载、运行和退出。
- 排查系统问题:通过查看进程状态定位 CPU、内存占用异常。
- 提升开发能力:掌握进程创建、通信与调度,写出更高效的程序。
- 便于运维管理:熟练使用进程管理命令,保障服务稳定运行。
三、进程的基本概念
1. 进程与程序的区别
程序是存储在磁盘上的静态文件,进程是程序被加载到内存后动态运行的实例。同一个程序可以启动多个进程,每个进程拥有独立的运行环境。
2. 进程的状态
Linux 进程主要有以下几种状态:
- 运行态(R):正在运行或处于可运行队列中。
- 睡眠态(S):可中断睡眠,等待某个事件或资源。
- 不可中断睡眠(D):等待 I/O 完成,通常不可被信号打断。
- 停止态(T):被暂停,可通过信号恢复。
- 僵尸态(Z):进程已结束,但父进程尚未回收其资源。
3. 进程的 PID 与 PPID
每个进程都有唯一的进程号(PID),以及记录其父进程的父进程号(PPID)。通过 PID 可以精确管理单个进程,通过 PPID 可以了解进程间的父子关系。
四、进程管理常用命令
1. 查看进程
使用 ps 命令查看当前系统中的进程信息:
# 查看当前终端下的进程
ps
# 查看所有进程的详细信息
ps -ef
# 查看指定进程,支持模糊匹配
ps -ef | grep nginx
使用 top 命令动态监控系统进程,实时查看 CPU、内存占用情况:
top
2. 终止进程
使用 kill 命令向进程发送信号,默认发送 SIGTERM(15)请求正常退出:
# 正常终止指定 PID 的进程
kill 1234
# 强制终止进程
kill -9 1234
# 按进程名终止
pkill nginx
3. 前后台切换
# 后台运行程序
./myapp &
# 查看后台任务
jobs
# 将后台任务切换到前台
fg %1
五、进程创建与退出
在 Linux 中,进程通过 fork() 系统调用创建子进程,子进程是父进程的副本。随后通常调用 exec() 系列函数加载新的程序。进程退出时返回退出码,父进程通过 wait() 回收子进程资源,避免产生僵尸进程。
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
printf("子进程 PID: %d\n", getpid());
} else if (pid > 0) {
// 父进程
wait(NULL);
printf("父进程 PID: %d\n", getpid());
}
return 0;
}
六、进程间通信(IPC)
进程间通信是 Linux 多进程编程的核心内容,常见方式包括:
- 管道(Pipe):用于父子进程或兄弟进程间单向传输数据。
- 消息队列(Message Queue):以消息为单位进行数据交换。
- 共享内存(Shared Memory):多个进程共享同一块内存区域,效率最高。
- 信号(Signal):用于异步通知进程某个事件发生。
- 套接字(Socket):支持不同主机之间的进程通信。
七、总结
Linux 进程是系统运行的核心概念。通过掌握进程的状态、管理命令、创建退出机制以及进程间通信方式,可以更深入地理解操作系统的工作原理,也为后续学习多线程、并发编程打下坚实基础。建议在虚拟机或云服务器上多动手实践,逐步熟悉各类进程管理命令。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)