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 命令查看当前系统中的进程信息:

bash 复制代码
# 查看当前终端下的进程
ps

# 查看所有进程的详细信息
ps -ef

# 查看指定进程,支持模糊匹配
ps -ef | grep nginx

使用 top 命令动态监控系统进程,实时查看 CPU、内存占用情况:

bash 复制代码
top

2. 终止进程

使用 kill 命令向进程发送信号,默认发送 SIGTERM(15)请求正常退出:

bash 复制代码
# 正常终止指定 PID 的进程
kill 1234

# 强制终止进程
kill -9 1234

# 按进程名终止
pkill nginx

3. 前后台切换

bash 复制代码
# 后台运行程序
./myapp &

# 查看后台任务
jobs

# 将后台任务切换到前台
fg %1

五、进程创建与退出

在 Linux 中,进程通过 fork() 系统调用创建子进程,子进程是父进程的副本。随后通常调用 exec() 系列函数加载新的程序。进程退出时返回退出码,父进程通过 wait() 回收子进程资源,避免产生僵尸进程。

c 复制代码
#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 进程是系统运行的核心概念。通过掌握进程的状态、管理命令、创建退出机制以及进程间通信方式,可以更深入地理解操作系统的工作原理,也为后续学习多线程、并发编程打下坚实基础。建议在虚拟机或云服务器上多动手实践,逐步熟悉各类进程管理命令。

相关推荐
充电zcx4 小时前
Linux:4:开发工具详解
linux·运维·服务器
一只路人甲4 小时前
使用AI快速学习
学习
传奇开心果编程5 小时前
【Rust入门练中学】第2课:变量、可变性与常量
开发语言·学习·rust
边境悍匪7 小时前
蜗牛学苑 Java 智能体学习 Day42|项目周开发技术汇总 1 思维导图复盘
java·开发语言·spring boot·学习·spring
Gyr08 小时前
浅刷了一遍51CTO软考题库客观题及其解析(4)
学习·软考·知识点·信息安全工程师
码农客栈8 小时前
linux 交叉编译tslib
linux
是隼人8 小时前
buuctf-pwn [NewStarCTF 2023 公开赛道]stack migration(64位栈迁移)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
鱼月半8 小时前
两台电脑直连网络不通怎么办?
linux·网络协议
ι:9 小时前
单相桥式全控整流仿真从零复现教学
windows·学习·matlab·simulink
CAYA-9 小时前
模电笔记1.1 半导体基础与 PN 结
经验分享·笔记·学习方法