轻轻松松——简单却详细的linux系统下的线程管理 教学,小白必看!!!
一 ps的用法及线程的理解
在 Linux 系统中,进程作为资源调度的基本单位,承载着所有运行中的程序和服务。无论是服务器运维、开发工作还是性能优化,熟练管理进程都是必备的核心技能。
系统卡顿、资源占用异常、程序无响应或端口冲突等常见问题,往往都与进程运行状态相关。本文将从基础概念入手,系统讲解 Linux 进程管理的核心要点,包括:
- 进程状态解析
- 监控命令详解
- 启停控制方法
- 优先级调度机制
- 后台进程管理技巧
通过以 SSH 服务(sshd)为例的实战演示,结合典型场景和操作命令,帮助您全面掌握 Linux 进程管理的关键技术。
在Linux操作系统中,通常使用ps命令来管理线程,这样可以减少对图形界面的依赖。
root@node2 桌面]# vim & [1] 2811 [root@node2 桌面]# ps PID TTY TIME CMD 2779 pts/0 00:00:00 bash 2811 pts/0 00:00:00 vim 2818 pts/0 00:00:00 ps [1]+ 已停止 vim [root@node2 桌面]# ps x PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /usr/lib/systemd/systemd rhgb --switched-root --sys 2 ? S 0:00 [kthreadd] 3 ? S 0:00 [pool_workqueue_] 4 ? I< 0:00 [kworker/R-rcu_g] 5 ? I< 0:00 [kworker/R-sync_]vim 命令后面添加&符号,可将命令转到后台运行。
[root@node2 桌面]# ps a PID TTY STAT TIME COMMAND 1999 tty2 Ssl+ 0:00 /usr/libexec/gdm-wayland-session env GNOME_SHELL_SE 2008 tty2 Sl+ 0:00 /usr/libexec/gnome-session-binary 2779 pts/0 Ss 0:00 bash 2811 pts/0 T 0:00 vim 2980 pts/0 R+ 0:00 ps a[root@node2 桌面]# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.4 108576 16640 ? Ss 12:01 0:03 /usr/lib/systemd/systemd rhgb --switch root 2 0.0 0.0 0 0 ? S 12:01 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 12:01 0:00 [pool_workqueue_] root 4 0.0 0.0 0 0 ? I< 12:01 0:00 [kworker/R-rcu_g] root 5 0.0 0.0 0 0 ? I< 12:01 0:00 [kworker/R-sync_]使用ps -aux命令可以查看当前所有用户的进程信息。
a 显示所有终端上的进程(包括其他用户的进程)
u 以用户友好的格式显示进程详情(如用户、CPU/内存占用等)
x 显示无控制终端的进程(如后台守护进程)
此外,还能实时监控后台进程的硬件资源占用情况
o 自定义输出字符,后跟逗号分隔的字段列表
root@node2 桌面]# ps axo pid,comm,%cpu,%mem,stat,pri,nice PID COMMAND %CPU %MEM STAT PRI NI 1 systemd 0.0 0.4 Ss 19 0 2 kthreadd 0.0 0.0 S 19 0 3 pool_workqueue_ 0.0 0.0 S 19 0 4 kworker/R-rcu_g 0.0 0.0 I< 39 -20 5 kworker/R-sync_ 0.0 0.0 I< 39 -20二 进程的前后台调用以及pgrep的用法
pgrep 是 Linux 系统中专门用于按条件查找进程 PID 的高效工具,相比传统的 ps 配合 grep 的组合方式更加简洁实用。
-u 按 id 来查找进程
-l 显示进程名字
-U 直接按用户名查找
-P 按父进程ID(PPID)查找子进程
root@node2 桌面]# su C [C@node2 桌面]$ vim & [1] 3435 [C@node2 桌面]$[root@node2 桌面]# id C 用户id=1000(C) 组id=1000(C) 组=1000(C) [root@node2 桌面]# pgrep -u 1000 3407 3435 [root@node2 桌面]#[root@node2 桌面]# pgrep -lU C 3686 bash 3714 vimroot@node2 桌面]# vim & [1] 3868 [root@node2 桌面]# ps PID TTY TIME CMD 3729 pts/1 00:00:00 bash 3868 pts/1 00:00:00 vim 3873 pts/1 00:00:00 ps [1]+ 已停止 vim [root@node2 桌面]# ps f PID TTY STAT TIME COMMAND 3729 pts/1 Ss 0:00 bash 3868 pts/1 T 0:00 \_ vim 3878 pts/1 R+ 0:00 \_ ps f 3653 pts/0 Ss 0:00 bash 3685 pts/0 S 0:00 \_ su C 1999 tty2 Ssl+ 0:00 /usr/libexec/gdm-wayland-session env GNOME_SHELL_SESSION_M 2008 tty2 Sl+ 0:00 \_ /usr/libexec/gnome-session-binary [root@node2 桌面]# [root@node2 桌面]# pgrep -P 3653 3685进程的前后台调用 fg bg jos命令的运用
在 Linux 终端中运行程序时,默认会占用当前会话,无法同时执行其他命令。通过前后台切换操作,可以灵活控制进程的运行状态,让终端保持可用。
<ctrl>+<z> 把占用shell的进程打入后台挂起
bg 把后台挂起的进程运行起来
fg 把后台进程调回前台
命令& 运行进程在后台
jobs 查看当前shell中在后台的所有工作
[root@node2 桌面]# jobs [1]+ 已停止 gedit [root@node2 桌面]# fg 1 gedit ^Z [1]+ 已停止 gedit [root@node2 桌面]# bg 1 [1]+ gedit & [root@node2 桌面]#打开监控,以系统自带的火狐浏览器为进程优先级示例
[root@node2 桌面]# watch -n 1 "ps axo pid,comm,stat,pri,nice | grep firefox"Every 1.0s: ps axo pid,comm,stat,pri,nice | grep firefox node2: Sun Jun 7 14:06:03 2026 4829 firefox Sl 19 0[root@node2 桌面]# renice -n -1 4829 4829 (process ID) 旧优先级为 0,新优先级为 -1Nice 值的范围是 -20 ~ 19,其中 -20 表示最高优先级,19 表示最低优先级
三 控制进程的信号
在 Linux 系统中,进程终止是运维中非常高频的操作。我们可以通过 kill 命令按 PID 精准终止单个进程,也可以通过 killall 按进程名批量终止多个进程。
1. kill -9:强制终止单个进程
当进程卡死、无法正常退出时,可以使用 kill -9 发送 SIGKILL 信号,强制终终止
[root@node2 桌面]# renice -n -1 4829 4829 (process ID) 旧优先级为 0,新优先级为 -1 [root@node2 桌面]# kill -9 48292. killall:按进程名批量终止进程
当系统中存在多个同名进程时,使用 killall 可以一次性终止所有同名进程,比逐个查找 PID 更高效。
示例:批量终止多个 vim 进程
[root@node2 桌面]# vim & [1] 8171 [root@node2 桌面]# vim & [2] 8176 [1]+ 已停止 vim [root@node2 桌面]# ps PID TTY TIME CMD 8130 pts/2 00:00:00 bash 8171 pts/2 00:00:00 vim 8176 pts/2 00:00:00 vim 8181 pts/2 00:00:00 ps [2]+ 已停止 vim [root@node2 桌面]# killall -9 vim [1]- 已杀死 vim [2]+ 已杀死 vim [root@node2 桌面]#kill -9 和 killall -9 属于强制操作,可能导致进程数据丢失、文件损坏,生产环境中需谨慎使用。
四· 用sshd的案例理解守护进程
守护进程(Daemon)是 Linux 系统中一类特殊的后台进程,它脱离终端会话、不受用户登录/注销影响,长期在后台运行,为系统或用户提供持续服务。sshd(SSH 服务)就是最典型的守护进程之一,我们可以通过它的部署与连接,直观理解守护进程的工作方式
[root@node2 桌面]# systemctl stop sshd [root@node2 桌面]# systemctl status sshd ○ sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: ena> Active: inactive (dead) since Sun 2026-06-07 14:23:49 CST; 17s ago Duration: 2h 22min 15.400s Docs: man:sshd(8) man:sshd_config(5) Process: 981 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SU> Main PID: 981 (code=exited, status=0/SUCCESS) CPU: 61ms停止 sshd 服务后,所有新的 SSH 远程连接将被拒绝,已有的连接也会被强制断开。如需恢复服务,可执行 systemctl start sshd,启动后 Active 状态会变为 active (running)。systemctl status 命令会同时显示服务的配置文件路径、启动命令、CPU 占用等信息,是排查守护进程问题的核心工
[root@node2 桌面]# systemctl start sshd [root@node2 桌面]# systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: ena> Active: active (running) since Sun 2026-06-07 14:26:58 CST; 2s ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 9195 (sshd) Tasks: 1 (limit: 22790) Memory: 1.5M CPU: 25ms CGroup: /system.slice/sshd.service └─9195 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"需要特别注意:执行 systemctl stop sshd 只是临时停止了当前运行的服务进程,并不会改变服务的开机自启配置。其中的 enabled 标识,代表 sshd 服务仍然被设置为开机自动启动。也就是说,虽然当前进程被停止了,但一旦服务器重启,sshd 会再次被 systemd 拉起
如果希望服务重启后不再自动运行,需要使用 systemctl disable 命令修改开机配置
[root@node2 桌面]# systemctl disable sshd.service [root@node2 桌面]# systemctl status sshd ○ sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; preset: enabled) Active: inactive (dead) Docs: man:sshd(8) man:sshd_config(5)执行后,状态信息中的 enabled 会变为 disabled,下次重启系统时 sshd 将不会自动启动。
反之,如果需要恢复开机自启,可以执行:
[root@node2 桌面]# systemctl enable --now sshd Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service. [root@node2 桌面]# systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) Active: active (running) since Sun 2026-06-07 14:38:37 CST; 5s ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 2752 (sshd) Tasks: 1 (limit: 22790) Memory: 2.5M CPU: 23ms CGroup: /system.slice/sshd.service └─2752 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"systemctl 提供了 --now 参数,可以一步完成「启动/停止服务」和「修改开机自启配置」两个操作,大幅简化运维流程。
五 结语
学习进程管理的最终目的,是让我们能透过系统的表象,理解其底层的调度逻辑,从而在面对进程异常、资源占用过高、服务故障等问题时,能够快速定位、精准处理,保障系统的高效与稳定。后续,你可以在此基础上,结合进程监控、日志分析、服务自动化部署等内容,进一步完善你的Linux运维知识体系,真正做到“知其然,更知其所以然”。
谢谢浏览我的博客!
