Linux:这啥命令?这台服务器我说了算-进程与服务——“程序明明装了,它为什么躺着不动?”

举报
yd_240046519 发表于 2026/10/31 12:34:36 2026/10/31
【摘要】 第五章:进程与服务——“程序明明装了,它为什么躺着不动?”安装软件只是第一步。真正到了服务器上,你很快会遇到另一类问题:“软件我明明装了,怎么访问不了?”“这个进程到底还活着没?”“它为什么占了 99% CPU?”“服务挂了,怎么把它叫醒?”这一章,我们就来认识 Linux 里那些“正在干活的家伙”。 1. 进程到底是什么?简单说:程序是文件,进程是正在运行的程序。比如你安装了 Nginx...

第五章:进程与服务——“程序明明装了,它为什么躺着不动?”

安装软件只是第一步。真正到了服务器上,你很快会遇到另一类问题:

“软件我明明装了,怎么访问不了?”
“这个进程到底还活着没?”
“它为什么占了 99% CPU?”
“服务挂了,怎么把它叫醒?”

这一章,我们就来认识 Linux 里那些“正在干活的家伙”。


1. 进程到底是什么?

简单说:

程序是文件,进程是正在运行的程序。

比如你安装了 Nginx,它只是安静地躺在磁盘里。启动它之后:

sudo systemctl start nginx

系统就会创建对应进程。

每个进程都有自己的 PID(Process ID),也就是进程编号。

查看当前终端相关进程:

ps

查看更多:

ps aux

想找某个程序:

ps aux | grep nginx

也可以更直接:

pgrep -a nginx

2. 谁在偷偷吃 CPU?

服务器突然卡成 PPT,第一反应通常是看进程:

top

它会实时显示 CPU、内存、进程数量和各进程资源占用。

常用快捷键:

P   按 CPU 使用率排序
M   按内存使用率排序
q   退出

如果安装了 htop:

sudo apt install htop
htop

界面会友好很多。

可以理解为:

top 是财务报表,htop 是做了可视化的财务报表。


3. 前台、后台到底是什么意思?

直接执行:

ping 127.0.0.1

它会一直霸占当前终端,这叫前台运行。

按:

Ctrl + C

可以终止。

想让命令跑到后台:

ping 127.0.0.1 > ping.log 2>&1 &

最后的 & 表示后台运行。

查看当前 Shell 的后台任务:

jobs

把任务拉回前台:

fg

暂停当前任务:

Ctrl + Z

暂停后再放到后台:

bg

4. 终端一关,程序也跟着没了?

有些后台任务依赖当前终端,你退出 SSH 后,它可能一起下班。

简单场景可以用:

nohup command &

例如:

nohup python3 app.py > app.log 2>&1 &

nohup 的意思接近“忽略终端挂断”。

不过正式服务不要长期靠 nohup 硬撑,生产环境更适合交给 systemd 管理。


5. systemctl:服务管理员登场

现代 Linux 上,很多系统服务由 systemd 管理。

查看服务状态:

systemctl status nginx

启动:

sudo systemctl start nginx

停止:

sudo systemctl stop nginx

重启:

sudo systemctl restart nginx

重新加载配置:

sudo systemctl reload nginx

设置开机自动启动:

sudo systemctl enable nginx

取消开机启动:

sudo systemctl disable nginx

立刻启动并设置开机启动:

sudo systemctl enable --now nginx

这条很实用。


6. start 和 enable 不是一回事

这是新手高频误区。

sudo systemctl start nginx

意思是:

“现在给我跑起来。”

而:

sudo systemctl enable nginx

意思是:

“以后开机的时候记得自动跑。”

所以:

  • start 管现在
  • enable 管下次开机

只执行 enable,服务不一定会马上启动。


7. 服务挂了,先别急着重装

查看状态:

systemctl status nginx

如果看到 failed,先别条件反射地“卸载重装”。

看日志:

journalctl -u nginx

最近 50 行:

journalctl -u nginx -n 50

实时追踪:

journalctl -u nginx -f

常见原因通常是:

  • 配置写错
  • 端口被占用
  • 权限不足
  • 文件不存在
  • 依赖启动失败

很多时候,真正的答案都写在日志里。


8. 怎么优雅地杀进程?

先找到 PID:

pgrep -a nginx

假设 PID 是 1234:

kill 1234

默认发送 SIGTERM,意思接近:

“兄弟,把手头工作收一下,然后下班。”

如果进程死活不听:

kill -9 1234

这就比较像:

“不用收拾了,现在就出去。”

所以 kill -9 不要一上来就用。

按名字杀:

pkill nginx

9. 一次实战:把 Nginx 管明白

安装:

sudo apt update
sudo apt install nginx

启动并设置开机启动:

sudo systemctl enable --now nginx

查看状态:

systemctl status nginx

找进程:

pgrep -a nginx

查看日志:

journalctl -u nginx -n 20

重启:

sudo systemctl restart nginx

停止:

sudo systemctl stop nginx

再次检查:

systemctl status nginx

到这里,你已经走完了一套标准服务管理流程。


10. 排障口诀

以后碰到“服务不工作”,按这个顺序:

1. 服务装了吗?
2. 服务启动了吗?
3. systemctl status 看状态
4. ps / pgrep 看进程
5. journalctl 看日志
6. 检查配置和端口
7. 修改后再 restart

别一出错就:

sudo reboot

重启有时能缓解问题,但也可能只是把问题藏到下一次重启。


11. 本章挑战

执行:

sleep 300 &

然后完成:

  1. 用 jobs 找到它
  2. 用 ps 或 pgrep 找到 PID
  3. 用 top 查看进程
  4. 用 kill 正常结束它
  5. 安装并启动 Nginx
  6. 设置 Nginx 开机自启
  7. 查看最近 20 行 Nginx 日志

全部完成,说明你已经开始具备真正的 Linux 运维思维:

不只是“会启动程序”,而是知道它现在在哪、干了什么、为什么挂、怎么救。


本章速查

ps aux
pgrep -a nginx
top
htop

jobs
fg
bg
nohup command &

systemctl status nginx
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl enable --now nginx

journalctl -u nginx
journalctl -u nginx -f

kill PID
kill -9 PID
pkill nginx

下一章:

《第六章:网络排障——“能 ping 通,为什么网站还是打不开?”》

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。