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

相关推荐
江华森几秒前
数据中心网络技术基础 —— 从原理到实操
linux·运维
海绵宝宝转agent14 分钟前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先
小oo呆17 分钟前
【学习心得】MCP工具开发学习笔记
笔记·学习
kyrie_sakura28 分钟前
大模型学习19 大模型学习 - LangChain2_Retrieval(RAG-文档处理-向量处理检索-Milvus)
学习·langchain·milvus
骑着蜗牛撵大象3271 小时前
手写一个 HTTP 服务器:从 socket 到 epoll,Linux 上到底怎么把请求变成响应
linux·服务器·网络·http·epoll·socket编程·并发模型
程序员初一1 小时前
我在 1C1G 的服务器上装了个桌面环境,然后用 VNC 连它,然后我后悔了
linux·ssh
2601_961146201 小时前
实验室用等离子表面处理设备处理汽车PP内饰件和PBT骨架的一点记录
笔记·汽车·设备
二十七日秋1 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
女神下凡1 小时前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范
星恒随风1 小时前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip