Linux:这啥命令?这台服务器我说了算-进程与服务——“程序明明装了,它为什么躺着不动?”
第五章:进程与服务——“程序明明装了,它为什么躺着不动?”
安装软件只是第一步。真正到了服务器上,你很快会遇到另一类问题:
“软件我明明装了,怎么访问不了?”
“这个进程到底还活着没?”
“它为什么占了 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 &
然后完成:
- 用
jobs找到它 - 用
ps或pgrep找到 PID - 用
top查看进程 - 用
kill正常结束它 - 安装并启动 Nginx
- 设置 Nginx 开机自启
- 查看最近 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 通,为什么网站还是打不开?”》
- 点赞
- 收藏
- 关注作者
评论(0)