# Linux进程管理

在 Linux 系统中，进程管理是系统运维和日常操作的重要部分。以下是常用的进程管理命令及其用途：

---

### **1. 查看进程**
- **`ps`**  
  查看当前进程的快照。  
  ```bash
  ps aux       # 查看所有运行中的进程（BSD 格式）
  ps -ef       # 查看所有进程（标准格式）
  ps -u user   # 查看特定用户的进程
  ps -p {pid} -f
  ```

- **`top` / `htop`**  
  实时动态查看进程和系统资源占用（`htop` 是增强版，需安装）。  
  ```bash
  top          # 交互式界面，按 `q` 退出
  htop         # 更友好的界面（支持鼠标操作）
  ```

- **`pstree`**  
  以树状结构显示进程关系。  
  ```bash
  pstree -p    # 显示进程及其 PID
  ```

---

### **2. 终止进程**
- **`kill`**  
  通过进程 ID (PID) 终止进程。  
  ```bash
  kill -9 PID          # 强制终止进程（SIGKILL）
  kill -15 PID         # 优雅终止进程（SIGTERM，默认）
  ```

- **`pkill`**  
  通过进程名终止进程。  
  ```bash
  pkill -9 nginx       # 强制终止所有名为 "nginx" 的进程
  ```

- **`killall`**  
  终止所有匹配名称的进程。  
  ```bash
  killall -9 python    # 强制终止所有名为 "python" 的进程
  ```

---

### **3. 进程优先级**
- **`nice`**  
  启动进程时指定优先级（范围：-20 最高优先级，19 最低）。  
  ```bash
  nice -n 10 command   # 以较低优先级运行命令
  ```

- **`renice`**  
  修改已运行进程的优先级。  
  ```bash
  renice -n 5 -p PID   # 修改指定 PID 的优先级为 5
  ```

---

### **4. 后台进程管理**
- **`&`**  
  将进程放到后台运行。  
  ```bash
  command &    # 后台运行命令
  ```

- **`jobs`**  
  查看当前终端后台任务。  
  ```bash
  jobs -l      # 显示后台任务及其 PID
  ```

- **`fg` / `bg`**  
  将任务切换到前台（`fg`）或继续后台运行（`bg`）。  
  ```bash
  fg %1        # 将任务 1 切换到前台
  bg %2        # 将任务 2 继续在后台运行
  ```

- **`nohup`**  
  退出终端后仍保持进程运行。  
  ```bash
  nohup command &      # 忽略 SIGHUP 信号，日志默认写入 nohup.out
  ```

---

### **5. 进程搜索**
- **`pgrep`**  
  根据名称查找进程 PID。  
  ```bash
  pgrep -u root nginx  # 查找 root 用户的 nginx 进程 PID
  ```

---

### **6. 监控工具**
- **`vmstat`**  
  查看系统资源使用情况（CPU、内存、IO 等）。  
  ```bash
  vmstat 1      # 每秒刷新一次
  ```

- **`pidstat`**（需安装 `sysstat`）  
  监控进程的 CPU、内存等资源占用。  
  ```bash
  pidstat -p PID 1   # 每秒监控指定 PID
  ```

---

### **7. 其他实用命令**
- **`lsof`**  
  列出被进程打开的文件。  
  ```bash
  lsof -i :80       # 查看占用 80 端口的进程
  lsof -p PID       # 查看指定 PID 打开的文件
  ```

- **`strace`**  
  跟踪进程的系统调用。  
  ```bash
  strace -p PID     # 跟踪进程的系统调用（调试用）
  ```

---

### **常见场景示例**
1. **终止失控的进程**  
   ```bash
   ps aux | grep "bad_process"  # 查找 PID
   kill -9 PID
   ```

2. **后台运行并保存日志**  
   ```bash
   nohup python script.py > output.log 2>&1 &
   ```

3. **监控高 CPU 进程**  
   ```bash
   top -o %CPU          # 按 CPU 使用率排序
   ```

---

掌握这些命令后，你可以高效地管理 Linux 系统中的进程。如果需要更详细的信息，可以通过 `man 命令名`（如 `man ps`）查看手册。

在 Linux 中，查看和管理进程的详细信息是系统管理的重要任务。以下是 **查看进程详情** 的常用命令和技巧，涵盖进程的资源占用、打开文件、环境变量、运行状态等关键信息。

---

### **1. 查看进程基本信息**
#### **(1) `ps`（进程快照）**
查看进程的 **PID、CPU、内存、启动命令** 等基础信息：
```bash
ps aux | grep <进程名>     # 模糊匹配进程（常用）
ps -ef | grep <进程名>     # 标准格式查看
ps -p <PID> -o pid,ppid,cmd,%cpu,%mem,stat  # 查看指定进程的详细信息
```
- **关键字段说明**：
  - `%CPU`：CPU 占用率  
  - `%MEM`：内存占用率  
  - `STAT`：进程状态（如 `S`=睡眠，`R`=运行，`Z`=僵尸进程）  
  - `PPID`：父进程 ID  

#### **(2) `top` / `htop`（实时监控）**
动态查看进程的 **资源占用排名**（CPU、内存等）：
```bash
top                          # 默认按 CPU 排序
top -p <PID>                 # 监控指定 PID
htop                         # 交互式增强版（支持鼠标操作）
```
- **交互操作**：
  - 按 `P`：按 CPU 排序  
  - 按 `M`：按内存排序  
  - 按 `F1`：查看帮助  

---

### **2. 查看进程的详细属性**
#### **(1) `/proc/<PID>` 目录**
Linux 将所有进程的详细信息映射到 `/proc/<PID>/` 目录下，可直接查看：
```bash
ls /proc/<PID>               # 查看进程的详细信息文件
cat /proc/<PID>/status       # 进程状态（名称、PID、内存等）
cat /proc/<PID>/cmdline      # 查看进程的完整启动命令
cat /proc/<PID>/environ      # 查看进程的环境变量
```
- **关键文件**：
  - `status`：进程状态摘要  
  - `statm`：内存使用情况  
  - `io`：I/O 统计信息  

#### **(2) `pmap`（内存映射）**
查看进程的 **内存占用分布**：
```bash
pmap -x <PID>                # 显示详细内存映射
```

---

### **3. 查看进程打开的文件和网络连接**
#### **(1) `lsof`（列出打开文件）**
查看进程打开的文件、目录、网络连接等：
```bash
lsof -p <PID>                # 查看指定进程打开的文件
lsof -i :80                  # 查看占用 80 端口的进程
lsof -u <用户名>             # 查看用户打开的文件
```
- **常用选项**：
  - `-i`：网络连接  
  - `-c <进程名>`：按进程名过滤  

#### **(2) `netstat` / `ss`（网络连接）**
查看进程的 **网络连接状态**：
```bash
netstat -tulnp | grep <PID>  # 查看进程的网络连接（旧版）
ss -tulnp | grep <PID>       # 更快的替代方案（推荐）
```

---

### **4. 查看进程的线程和调用栈**
#### **(1) `pstree`（进程树）**
显示进程的 **父子关系** 和线程：
```bash
pstree -p <PID>              # 树状显示进程及线程
```

#### **(2) `strace`（系统调用跟踪）**
监控进程的 **系统调用**（调试用）：
```bash
strace -p <PID>              # 实时跟踪进程的系统调用
strace -e open,read <命令>   # 跟踪命令的特定系统调用
```

#### **(3) `gdb`（调试器附加）**
深入分析进程的运行状态（需谨慎使用）：
```bash
gdb -p <PID>                 # 附加到运行中的进程
```

---

### **5. 查看进程的资源限制**
#### **(1) `ulimit`**
查看当前 shell 的资源限制：
```bash
ulimit -a                    # 显示所有限制（如打开文件数、栈大小等）
```

#### **(2) `/proc/<PID>/limits`**
查看指定进程的资源限制：
```bash
cat /proc/<PID>/limits       # 显示进程的软/硬限制
```

---

### **6. 统计进程的资源使用**
#### **(1) `pidstat`（综合监控）**
监控进程的 **CPU、内存、IO** 等（需安装 `sysstat`）：
```bash
pidstat -p <PID> 1           # 每秒刷新一次统计信息
pidstat -d -p <PID>          # 监控磁盘 I/O
```

#### **(2) `ps -eo`（自定义输出）**
按需显示进程的特定字段：
```bash
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%mem | head  # 按内存排序
```

---

### **常见问题排查示例**
1. **进程卡死**  
   ```bash
   top                        # 找到高 CPU/内存的 PID
   strace -p <PID>            # 检查系统调用是否阻塞
   kill -9 <PID>              # 强制终止
   ```

2. **内存泄漏**  
   ```bash
   pmap -x <PID>              # 查看内存分布
   cat /proc/<PID>/status | grep VmRSS  # 检查实际内存占用
   ```

3. **端口冲突**  
   ```bash
   lsof -i :8080              # 查看占用端口的进程
   ```

---

### **总结**
| **需求**               | **命令**                     |
|------------------------|-----------------------------|
| 查看进程基本信息       | `ps aux` / `top`            |
| 查看进程环境变量       | `cat /proc/<PID>/environ`   |
| 查看打开的文件         | `lsof -p <PID>`             |
| 监控资源占用           | `pidstat` / `htop`          |
| 分析系统调用           | `strace -p <PID>`           |
| 查看网络连接           | `ss -tulnp` / `netstat`     |

通过组合这些命令，你可以全面掌握 Linux 进程的详细状态！