diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240619_\350\277\233\347\250\213\347\256\241\347\220\206.md" "b/42 \345\210\230\350\213\217\350\220\214/20240619_\350\277\233\347\250\213\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..699bb716f597c9b9f66d9d84dcf93f516adff83c --- /dev/null +++ "b/42 \345\210\230\350\213\217\350\220\214/20240619_\350\277\233\347\250\213\347\256\241\347\220\206.md" @@ -0,0 +1,173 @@ +#### 进程管理 + +##### 进程概述 + +- 进程是计算机系统中正在运行的程序的实例。每个进程都有唯一的标识符(PID)和相关的资源,例如内存、文件描述符和CPU时间。 +- 在Linux中,进程的创建和管理是由操作系统内核负责的。内核通过调度器决定哪些进程可以运行,并根据优先级和其他策略对其进行调度。 + +##### 进程管理命令 + +1. **ps命令:**用于列出当前正在运行的进程。 + + ```bash + ps -aux:显示所有用户的所有进程。 + ps –aux | grep ssh 查看有没有 sshd 服务 + ps -ef:以完整格式显示所有进程 + # -e:  显示所有进程    -f:  全格式 + ps -e --forest:以树形结构显示进程关系 + ``` + + | 字段 | 说明 | + | :---: | :----------------------------------------------------------: | + | UID | 用户 ID | + | PID | 进程识别号 | + | PPID | 父进程 ID | + | TIME | 此进程所消耗CPU时间 | + | STIME | 进程启动的时间 | + | CMD | 正在执行的命令或进程 | + | TTY | 完整的终端名称 | + | C | 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高 | + +2. **top命令:**实时显示系统中的进程和系统性能信息。 + +3. **htop:**与top相似,htop是交互式的文本模式的进程查看器,提供了实时的进程监视和系统状态信息。 + +4. **kill命令:**用于终止指定进程 + + ```bash + kill [选项] 进程号 (功能描述:通过进程号杀死进程) + killall 进程名称(功能描述:通过进程名称杀死进程,也支持通配 符,这在系统因负载过大而变得很慢时很有用) + ``` + + **常用选项:** + + - -9 : 表示强迫进程立即停止 + +5. **killall命令:**终止指定名称的所有进程。 + + ```bash + killall 进程名 + ``` + +6. **pgrep命令:**根据进程名查找匹配的进程ID。 + + ```bash + pgrep [选项] [模式] + pgrep -u alice ssh 查找属于用户 alice 的 ssh 相关进程 + ``` + + 选项: + + - `-u 用户名`: 只显示属于特定用户的进程。 + - `-U 用户ID`: 类似于`-u`,但是使用用户ID。 + - `-g 组名`: 只显示属于特定组的进程。 + - `-G 组ID`: 类似于`-g`,但是使用组ID。 + - `-x`: 匹配整个进程名,而不是部分匹配。 + - `-f`: 匹配完整的命令行,包括参数。 + - `-l`: 显示进程名,而不仅仅是PID。 + - `-n`: 反向搜索,即不匹配的进程会被列出。 + - `-d 分隔符`: 指定输出结果之间的分隔符,默认为换行符。 + +7. **pkill命令:**根据进程名终止匹配的进程。 + + ```bash + pkill [选项] [信号] [进程名或模式] + pkill -f "ping 8.8.8.8" 根据完整的命令行终止所有 ping 8.8.8.8 的进程 + pkill -P 1234 终止所有由 PID 为 1234 的进程启动的子进程 + ``` + + 选项 + + - `-f`, `--full`: 匹配整个命令行,而不仅仅是进程名。 + - `-x`, `--exact`: 匹配确切的进程名,避免模糊匹配。 + - `-l`, `--list`: 列出可能的信号名。 + - `-signal`, `--signal=SIG`: 发送特定信号。默认情况下,`pkill` 发送 `SIGTERM` 信号。 + - `-P`, `--ppid=PID`: 发送信号给由指定 PID 的进程启动的所有子进程。 + - `-g`, `--pgroup=PGID`: 发送信号给指定进程组内的所有进程。 + - `-t`, `--terminal=TNAME`: 发送信号给在指定终端上运行的所有进程。 + - `-u`, `--user=USER`: 发送信号给由指定用户运行的所有匹配进程。 + - `-U`, `--uid=UID`: 类似 `-u`,但使用 UID 而不是用户名。 + + 信号 + + - 信号可以是名称(如 `TERM`, `KILL`, `STOP` 等)或相应的数字(如 `15`, `9`, `19` 等) + +8. **nice命令:**设置进程的优先级。 + + ```bash + nice [选项] [值] 命令 [参数] + # 值是 niceness 的值范围从 -20 到 19,其中 -20 表示最高优先级,19 表示最低优先级,而默认值是 0 + ``` + + 选项: + + - `-n` 或 `--adjustment`:用于指定 niceness 的调整值。 + - `-h` 或 `--help`:显示帮助信息。 + - `-V` 或 `--version`:显示版本信息 + +9. **renice命令:**修改正在运行进程的优先级。 + + ```bash + renice [选项] [值] [PID或PID列表] + renice 15 -u username 根据用户 ID 改变所有相关进程的 niceness + # username 是用户的实际用户名 + ``` + + 选项: + + - `-n` 或 `--adjustment`:指定 niceness 的调整值。如果没有指定,`renice` 将提示输入。 + - `-p` 或 `--pid`:列出指定的 PID。 + - `-g` 或 `--pgid`:根据进程组 ID 来调整 niceness。 + - `-u` 或 `--uid`:根据用户 ID 来调整 niceness。 + - `-h` 或 `--help`:显示帮助信息。 + - `-V` 或 `--version`:显示版本信息。 + +10. **bg和fg命令:**将进程放到后台或前台运行。 + + - `bg` 命令用于将一个暂停(在后台挂起)的作业恢复并放到后台继续运行 + + ```bash + bg %1 + # 将第一个被暂停的作业在后台继续运行 + ``` + + - `fg` 命令用于将一个在后台运行的作业带到前台,使其成为当前活跃的进程 + + ```bash + fg %2 + # 将第二个后台作业带到前台运行 + ``` + + - **查看作业状态** + + - 使用 `jobs` 命令可以查看当前所有作业的状态,包括正在运行的、后台挂起的和前台运行的作业 + +#### 查看进程号 + +1. **ps 命令** + + - `ps aux` 或 `ps -ef`:这些命令会显示系统中所有进程的详细信息,其中包括PID。 + + - 结合 `grep` 可以过滤特定进程: + + ```bash + ps -ef | grep 进程名 + ``` + +2. **pgrep 命令** + + - 直接通过进程名查找PID + + ```bash + pgrep 进程名 + ``` + +3. **pidof 命令** + + - 查找特定进程的PID + + ```bash + pidof 进程名 + ``` + +