想让Linux服务器停止一直刷命令,最快的办法是先在当前终端按 Ctrl+C 中断前台进程;如果没反应,另开一个 SSH 会话用 top 或 ps 找到吃 CPU 的那个进程,先 kill 送 TERM 信号,不走再 kill -9;最后回头把触发它的脚本、cron 任务或 systemd 服务清理干净,否则过几分钟它还会自己活过来。
刷屏这件事,本质不是“终端坏了”,而是有个进程在不停把内容写到你面前,想停止刷屏,思路永远是先断输出、再找源头、最后防复发,顺序反了就容易白折腾。
Linux服务器一直刷命令怎么停止?三个动作按顺序来
第一个动作:Ctrl+C 断掉前台进程
如果刷屏的命令是你自己或者同事刚手动敲下去的,直接按 Ctrl+C,它给前台进程发的是 SIGINT 信号,大多数写得规范的脚本会响应它并退出,按住不放两秒再松手,比连点十下有效。
第二个动作:Ctrl+Z 挂起,再 kill %1
Ctrl+C 没反应的话,试 Ctrl+Z,这是 SIGTSTP,会把进程挂起而不是杀掉,屏幕会立刻停止滚动,看到 [1]+ Stopped 之后,敲 kill %1,把它从挂起状态彻底结束掉,用 jobs 可以确认当前会话里到底挂了几个任务。
第三个动作:新开 SSH 会话,从外部处理
当前终端已经被刷得没法敲字,最稳的做法是再开一个 SSH 窗口登录同一台机器,在干净的终端里排查,这也是运维处理线上问题的常规姿势,别在一个被污染的会话里硬扛。
Linux终端不停输出滚动怎么解决?先分清是哪一类刷屏
同样是刷屏,根因完全不同,处理方式差别很大,先看内容特征,基本就能对上号。
| 刷屏特征 | 常见根因 | 快速定位命令 | 处理方向 |
|---|---|---|---|
| 同一行日志或变量反复打印 | 脚本死循环、缺少退出条件 | ps -eo pid,pcpu,etime,cmd --sort=-pcpu |
结束进程,改脚本 |
| 每隔固定时间刷一次 | cron 或 systemd timer 重复触发 | crontab -l、systemctl list-timers |
删任务或加锁 |
| 报错、连接记录、奇怪路径 | 恶意脚本或被入侵 | ps aux --forest、ss -antp |
断网、清理、加固 |
| 系统层面不断打印内核信息 | 硬件、驱动或内核日志级别过高 | dmesg -w |
调整 printk 级别 |
脚本死循环:输出量大但内容单调
自己写的 while true 忘了加 sleep,或者解析文件时没推进指针,都会形成这种局面,这类进程通常 CPU 占用很高,用 top -c 一看就能锁定。
定时任务重复触发:每隔整分钟刷一批
crontab -l 查当前用户的任务,ls /etc/cron.d/ 和 /var/spool/cron/ 查系统和其它用户的任务,常见的坑是上一轮没跑完下一轮又启动,越堆越多。
恶意进程:刷的是你没见过的命令
里出现 /tmp、/dev/shm、/var/tmp 下的可执行文件,或者有对外连接,先别急着只杀进程,拔掉公网入口或加安全组策略,再慢慢清理,否则杀掉一个还会起另一个。
Linux脚本死循环一直执行怎么停下来?命令清单
定位:先看清楚是谁在刷
ps -eo pid,ppid,etime,pcpu,cmd --sort=-pcpu | head -20,按 CPU 排序,最上面通常就是元凶。pgrep -af 关键字,知道脚本名或命令片段时直接搜。pstree -p,看清父子关系,判断是哪个父进程反复拉起子进程。lsof -p PID,确认进程打开了哪些文件,判断它是在写日志还是在读设备。
终止:从温柔到强硬
kill PID,默认发 SIGTERM,给进程收尾的机会。- 等三到五秒,
ps -p PID还在,就kill -9 PID。 - 子进程杀不干净,用
pkill -f 脚本名,或者kill -- -PGID干掉整个进程组。 - 进程是 systemd 拉起的,先
systemctl stop 服务名,再systemctl disable 服务名。
清理残留:别只杀进程
进程杀了,触发条件还在,几分钟后原样复活,务必再查三处:crontab -l 里有没有那条任务、systemctl list-units --type=service --state=running 里有没有可疑服务、~/.bashrc 和 /etc/profile.d/ 里有没有被塞进去的启动命令,另外别忘了 screen 和 tmux 里的后台会话,tmux ls 看一眼。
云服务器SSH会话被命令刷屏怎么办?这三处最容易卡住
Ctrl+C 按了没反应
一种情况是输出太快,你的按键被淹没在数据流里,先按 Ctrl+S 暂停终端输出(这是流控,不是保存),屏幕立刻静止,再按 Ctrl+C,最后按 Ctrl+Q 恢复,另一种情况是终端模式被程序改乱了,断线重连后敲 stty sane 或 reset 就能恢复正常。
kill 之后进程又复活
说明有守护方在拉它,用 ps -o ppid= -p PID 看父进程是谁,顺着往上找,多半是 cron、systemd 或者一个 shell 循环,把父级处理掉,问题才算断根。
刷屏把磁盘写满
高频输出重定向到文件时,几分钟就能吃掉几十 GB,先 df -h 看分区,再 du -sh /var/log/ 找大文件,临时救急可以清掉日志,但注意别直接删正在写的文件,用 > 文件名 的方式清空更安全。
顺带提一句成本问题:排查这类故障用系统自带的 top、ps、pgrep 就够,不必为了刷屏专门采购监控产品,是否上付费监控,取决于服务器数量和团队规模,而不是这一次故障,近年来不少云厂商的轻量监控默认就带进程告警,够用。
怎么预防它再刷一次
脚本加超时和退出条件
执行不确定耗时的脚本时,用 timeout 30s ./task.sh 包一层,超时自动结束,循环体里加计数器和最大次数判断,别写没有尽头的 while true。
cron 任务加锁
flock -n /tmp/task.lock -c './task.sh',上一轮没结束就直接跳过,避免堆叠,业内专家指出,定时任务引发的高频输出,多数都不是脚本本身有问题,而是并发叠加。
输出一定要重定向
后台运行时写 nohup ./task.sh > /var/log/task.log 2>&1 &,把输出从终端挪到文件,再配上 logrotate 按天切割、限制份数,终端干净了,日志也有了,排查问题时不用靠翻屏。
定期看一眼异常进程
把 ps -eo pid,pcpu,pmem,cmd --sort=-pcpu | head 和 ss -antp 加进日常巡检,行业共识认为,绝大多数刷屏和异常进程问题,都能在爆发前通过一次进程和连接检查发现苗头。
停止Linux服务器刷命令的常见问题
问:Ctrl+C、Ctrl+Z 都试过,终端还是刷个不停,怎么办?
答:别在当前会话里继续操作,直接关掉这个 SSH 窗口或断线重连,从新会话用 ps、top 定位进程,当前终端的输入已经被输出流挤掉,继续敲键盘大概率无效。
问:kill -9 之后进程换了 PID 又出现,是什么原因?
答:有父级进程在重启它,先 ps -o ppid= -p PID 查父进程,再顺着 pstree 找到 cron、systemd 或监控脚本,把触发源停掉,只杀子进程属于治标。
问:怎么判断刷屏是脚本写坏了还是服务器被入侵了?
答:看三点可执行文件是不是在 /tmp、/dev/shm 这类目录,有没有陌生的对外连接(ss -antp),有没有陌生的 cron 任务或用户,三条里中一条,按安全事件处理:先隔离网络,再清理,最后改 SSH 端口、禁密码登录、加密钥,三条都不中,基本就是脚本逻辑问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/786195.html


