Linux进程
进程介绍
1. 进程的基本概念
-
定义:进程是程序的一次执行过程,拥有独立的地址空间、资源(如内存、文件描述符)和唯一的进程 ID(PID)。
-
组成:
-
代码段:程序的指令。
-
数据段:全局变量和静态变量。
-
堆栈段:局部变量和函数调用信息。
-
进程控制块(PCB):内核数据结构(如
task_struct
),存储进程状态、PID、优先级等信息。
-
2. 进程的生命周期
Linux 进程通常有以下状态(可通过 ps
命令查看):
-
R (Running):正在运行或可运行(就绪)。
-
S (Sleeping):可中断的睡眠(等待事件,如 I/O)。
-
D (Uninterruptible Sleep):不可中断的睡眠(通常等待硬件操作)。
-
T (Stopped):被信号(如
SIGSTOP
)暂停。 -
Z (Zombie):已终止但父进程未回收资源。
-
X (Dead):完全终止(不可见)。
3. 进程相关命令
查看进程
-
ps
:查看当前进程快照。bash
复制
下载
ps aux # 查看所有进程详细信息 ps -ef # 查看完整格式的进程列表
-
top
/htop
:动态查看进程资源占用(CPU、内存等)。 -
pstree
:以树形结构显示进程关系。
管理进程
-
kill
:发送信号终止或控制进程。bash
复制
下载
kill -9 PID # 强制终止进程(SIGKILL) kill -15 PID # 优雅终止(SIGTERM)
-
nice
/renice
:调整进程优先级(Nice 值范围:-20 到 19,值越低优先级越高)。 -
bg
/fg
:控制进程后台/前台运行。
查找进程
-
pgrep
:根据名称查找 PID。bash
复制
下载
pgrep nginx
-
pidof
:获取正在运行的程序的 PID。bash
复制
下载
pidof sshd
4. 进程间通信(IPC)
Linux 进程可以通过以下方式通信:
-
信号(Signals):如
SIGINT
(Ctrl+C)、SIGKILL
。 -
管道(Pipe):匿名管道(
|
)或命名管道(mkfifo
)。 -
共享内存:高效的数据共享。
-
消息队列:存储在内核中的消息链表。
-
套接字(Socket):跨网络通信。
5. 前台与后台进程
-
前台进程:占用终端,接收输入(如直接运行
vim
)。 -
后台进程:不占用终端,以
&
启动:bash
复制
下载
sleep 60 &
-
切换状态:
-
Ctrl + Z
:暂停进程并转入后台。 -
jobs
:查看后台作业。 -
fg %n
:将后台作业n
切换到前台。
-
6. 守护进程(Daemon)
-
长期运行的后台服务进程(如
sshd
、nginx
)。 -
特点:
-
脱离终端(由
init
或systemd
管理)。 -
通常以 root 权限运行。
-
-
创建方式:通过
fork()
两次并脱离控制终端。
7. 僵尸进程与孤儿进程
-
僵尸进程:子进程终止后,父进程未调用
wait()
回收其资源。解决:bash
复制
下载
kill -HUP PPID # 重启父进程
-
孤儿进程:父进程先终止,子进程由
init
(PID 1)接管。
8. 系统调用与进程管理
Linux 提供以下关键系统调用:
-
fork()
:创建子进程。 -
exec()
:替换当前进程映像。 -
wait()
:父进程等待子进程终止。