轻轻松松——简单却详细的linux系统下的线程管理 教学,小白必看!!!

📅 2026/6/17 6:05:20
轻轻松松——简单却详细的linux系统下的线程管理 教学,小白必看!!!
一 ps的用法及线程的理解在 Linux 系统中进程作为资源调度的基本单位承载着所有运行中的程序和服务。无论是服务器运维、开发工作还是性能优化熟练管理进程都是必备的核心技能。系统卡顿、资源占用异常、程序无响应或端口冲突等常见问题往往都与进程运行状态相关。本文将从基础概念入手系统讲解 Linux 进程管理的核心要点包括进程状态解析监控命令详解启停控制方法优先级调度机制后台进程管理技巧通过以 SSH 服务sshd为例的实战演示结合典型场景和操作命令帮助您全面掌握 Linux 进程管理的关键技术。在Linux操作系统中通常使用ps命令来管理线程这样可以减少对图形界面的依赖。rootnode2 桌面]# vim [1] 2811 [rootnode2 桌面]# 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 [rootnode2 桌面]# 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 命令后面添加符号可将命令转到后台运行。[rootnode2 桌面]# 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[rootnode2 桌面]# 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 自定义输出字符后跟逗号分隔的字段列表rootnode2 桌面]# 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 按父进程IDPPID查找子进程rootnode2 桌面]# su C [Cnode2 桌面]$ vim [1] 3435 [Cnode2 桌面]$[rootnode2 桌面]# id C 用户id1000(C) 组id1000(C) 组1000(C) [rootnode2 桌面]# pgrep -u 1000 3407 3435 [rootnode2 桌面]#[rootnode2 桌面]# pgrep -lU C 3686 bash 3714 vimrootnode2 桌面]# vim [1] 3868 [rootnode2 桌面]# 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 [rootnode2 桌面]# 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 [rootnode2 桌面]# [rootnode2 桌面]# pgrep -P 3653 3685进程的前后台调用 fg bg jos命令的运用在 Linux 终端中运行程序时默认会占用当前会话无法同时执行其他命令。通过前后台切换操作可以灵活控制进程的运行状态让终端保持可用。ctrlz 把占用shell的进程打入后台挂起bg 把后台挂起的进程运行起来fg 把后台进程调回前台命令 运行进程在后台jobs 查看当前shell中在后台的所有工作[rootnode2 桌面]# jobs [1] 已停止 gedit [rootnode2 桌面]# fg 1 gedit ^Z [1] 已停止 gedit [rootnode2 桌面]# bg 1 [1] gedit [rootnode2 桌面]#打开监控以系统自带的火狐浏览器为进程优先级示例[rootnode2 桌面]# watch -n 1 ps axo pid,comm,stat,pri,nice | grep firefoxEvery 1.0s: ps axo pid,comm,stat,pri,nice | grep firefox node2: Sun Jun 7 14:06:03 2026 4829 firefox Sl 19 0[rootnode2 桌面]# renice -n -1 4829 4829 (process ID) 旧优先级为 0新优先级为 -1Nice 值的范围是 -20 ~ 19其中 -20 表示最高优先级19 表示最低优先级三 控制进程的信号在 Linux 系统中进程终止是运维中非常高频的操作。我们可以通过 kill 命令按 PID 精准终止单个进程也可以通过 killall 按进程名批量终止多个进程。1. kill -9强制终止单个进程当进程卡死、无法正常退出时可以使用 kill -9 发送 SIGKILL 信号强制终终止[rootnode2 桌面]# renice -n -1 4829 4829 (process ID) 旧优先级为 0新优先级为 -1 [rootnode2 桌面]# kill -9 48292. killall按进程名批量终止进程当系统中存在多个同名进程时使用 killall 可以一次性终止所有同名进程比逐个查找 PID 更高效。示例批量终止多个 vim 进程[rootnode2 桌面]# vim [1] 8171 [rootnode2 桌面]# vim [2] 8176 [1] 已停止 vim [rootnode2 桌面]# 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 [rootnode2 桌面]# killall -9 vim [1]- 已杀死 vim [2] 已杀死 vim [rootnode2 桌面]#kill -9 和 killall -9 属于强制操作可能导致进程数据丢失、文件损坏生产环境中需谨慎使用。四· 用sshd的案例理解守护进程守护进程Daemon是 Linux 系统中一类特殊的后台进程它脱离终端会话、不受用户登录/注销影响长期在后台运行为系统或用户提供持续服务。sshdSSH 服务就是最典型的守护进程之一我们可以通过它的部署与连接直观理解守护进程的工作方式[rootnode2 桌面]# systemctl stop sshd [rootnode2 桌面]# 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 (codeexited, status0/SU Main PID: 981 (codeexited, status0/SUCCESS) CPU: 61ms停止 sshd 服务后所有新的 SSH 远程连接将被拒绝已有的连接也会被强制断开。如需恢复服务可执行 systemctl start sshd启动后 Active 状态会变为 active (running)。systemctl status 命令会同时显示服务的配置文件路径、启动命令、CPU 占用等信息是排查守护进程问题的核心工[rootnode2 桌面]# systemctl start sshd [rootnode2 桌面]# 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 命令修改开机配置[rootnode2 桌面]# systemctl disable sshd.service [rootnode2 桌面]# 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 将不会自动启动。反之如果需要恢复开机自启可以执行[rootnode2 桌面]# systemctl enable --now sshd Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service. [rootnode2 桌面]# 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 startupssystemctl 提供了 --now 参数可以一步完成「启动/停止服务」和「修改开机自启配置」两个操作大幅简化运维流程。五 结语学习进程管理的最终目的是让我们能透过系统的表象理解其底层的调度逻辑从而在面对进程异常、资源占用过高、服务故障等问题时能够快速定位、精准处理保障系统的高效与稳定。后续你可以在此基础上结合进程监控、日志分析、服务自动化部署等内容进一步完善你的Linux运维知识体系真正做到“知其然更知其所以然”。谢谢浏览我的博客