1. Linux进程基础概念解析
在Linux系统中,进程是程序执行的基本单位。当我们运行一个命令或启动一个应用程序时,系统就会创建一个新的进程。与Windows系统不同,Linux进程具有更精细的控制机制和更丰富的状态信息。
每个进程都拥有独立的:
- 进程ID(PID):唯一标识符
- 内存空间:包括代码段、数据段、堆栈等
- 文件描述符表:记录打开的文件和I/O资源
- 环境变量:继承自父进程或自定义设置
- 运行状态:就绪、运行、阻塞等
重要提示:Linux中第一个进程是init/systemd(PID为1),所有其他进程都是它的子进程或后代进程。
1.1 进程与程序的区别
初学者常混淆这两个概念:
- 程序:静态的二进制可执行文件,存储在磁盘上
- 进程:动态的程序执行实例,拥有运行时状态
举例来说,/usr/bin/vim是一个程序,当用户执行vim时,系统会创建一个运行中的vim进程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 进程创建与管理实战
2.1 进程创建方式
Linux系统提供以下几种创建进程的方式:
- fork()系统调用
c复制pid_t pid = fork();
if (pid == 0) {
// 子进程代码
} else if (pid > 0) {
// 父进程代码
} else {
// 错误处理
}
特点:
- 完全复制父进程地址空间
- 执行速度极快(写时复制技术)
- 子进程从fork()返回处继续执行
- exec系列函数
c复制execl("/bin/ls", "ls", "-l", NULL);
特点:
- 替换当前进程映像
- 不创建新进程
- 常用于fork()后的子进程
- system()函数
c复制system("gcc hello.c -o hello");
特点:
- 内部封装了fork()+exec+wait
- 简单但效率较低
- 存在安全风险(shell注入)
2.2 进程监控命令
常用进程监控命令对比:
| 命令 | 功能 | 常用参数 | 输出示例 |
|---|---|---|---|
| ps | 显示进 |
