进程管理基础
系统中每一个正在运行的程序,都对应一个或多个进程(Process),每个进程都有唯一的进程 ID(PID)。查看进程状态、控制进程的启动和终止,是日常运维和调试中绕不开的一类操作。
查看进程:ps 与 top
Section titled “查看进程:ps 与 top”ps aux # 列出系统上所有用户的所有进程,静态快照ps aux | grep nginx # 结合管道,只筛选出名称包含 nginx 的进程top # 实时刷新的进程监控界面,按资源占用排序ps aux 输出的每一列分别对应用户、PID、CPU 占用率、内存占用率、启动时间、运行时长、执行的完整命令等信息,是一次性的快照,执行完就不会再更新。top 则是持续刷新的动态视图,默认按 CPU 占用率从高到低排序,适合排查“当前是哪个进程在占用大量资源”这类问题;按 q 键退出。
前台与后台:& 、 jobs 、 fg 、 bg
Section titled “前台与后台:& 、 jobs 、 fg 、 bg”一条命令默认在前台(Foreground)执行,意味着 Shell 会等待它执行完毕,才会重新显示提示符接收下一条命令。在命令末尾加 &,可以让它转入后台(Background)执行,Shell 不等待,立即返回提示符:
long-running-command & # 后台启动,Shell 立即返回提示符可以继续输入jobs # 列出当前 Shell 会话中的后台任务fg %1 # 把编号为 1 的后台任务切回前台bg %1 # 让编号为 1、已暂停的任务在后台继续运行正在前台运行的任务,可以用 Ctrl + Z 暂停(不是终止,只是挂起),暂停后的任务既可以用 bg 让它转入后台继续执行,也可以用 fg 切回前台。
结束进程:kill 与信号
Section titled “结束进程:kill 与信号”kill 命令的名字容易造成误解——它的实际作用不是“强制终止”,而是“向进程发送一个信号”,进程终止只是其中一种信号被处理后可能产生的结果。
kill <PID> # 发送 SIGTERM(15)信号,请求进程正常退出kill -9 <PID> # 发送 SIGKILL(9)信号,强制立即终止,进程无法拦截或处理kill -l # 列出所有可用的信号名称及编号SIGTERM(默认信号)会通知进程“请自行清理并退出”,进程可以捕获这个信号,执行保存数据、释放资源等收尾操作后再退出——这是更安全的终止方式。SIGKILL 则由内核直接强制终止进程,进程本身没有机会响应或做任何清理,通常只在 SIGTERM 无效、进程确实卡死的情况下才使用。
按名称查找并结束进程:pkill 与 killall
Section titled “按名称查找并结束进程:pkill 与 killall”需要按进程名而不是 PID 操作时,pkill 和 killall 更直接:
pkill nginx # 按名称匹配并发送信号(默认 SIGTERM),支持部分匹配killall nginx # 按精确的进程名匹配并发送信号两者都可以配合 -9 参数发送 SIGKILL,使用方式与 kill -9 一致,只是目标从 PID 换成了进程名。
为什么这很重要
Section titled “为什么这很重要”这个主题是构建可靠 Linux 开发流程的重要组成部分。对它有清晰的理解,会让后续任务变得更容易,因为你能更快地判断某一步是否缺失或使用不当。
- 在安全的测试环境中尝试这里展示的命令和配置。
- 比较这些概念在不同发行版或工具之间的适用差异。
- 记下一次实践中哪些步骤成功,哪些失败,这样下次遇到问题时更容易定位。
- 将这篇文章与系列中相关内容结合起来,加深整体理解。
- 跳过验证步骤,默认系统已经配置正确。
- 不对命令中的路径、软件包名称或工具版本进行适配,直接复制粘贴执行。
- 把这个主题当成孤立的技巧,而不是整个开发流程的一部分。