Shell Daily 2026-01-17: 任务挂起 (Job Control)
作为一名 Linux 用户,你是否经历过这种尴尬:正在 Vim 里编辑复杂的配置文件,突然需要去查看一下网络接口的 IP,或者去另一个目录确认文件名。
此时你会怎么做?保存退出 Vim?还是手忙脚乱地去开一个新的终端窗口(SSH 会话)?
其实,Unix Shell 早就赋予了你“时间暂停”的超能力。利用 Job Control (作业管理),你可以随时挂起当前任务,切回终端干别的事,完事后再“无缝衔接”回去。
怎么用
核心是一组快捷键和命令:
-
Ctrl + z:挂起 (Suspend) 当前前台进程。它不是结束进程,而是让进程“暂停”并退居后台。 -
jobs:查看当前 Shell 下所有挂起或运行中的后台任务。 -
fg(Foreground):将后台任务调回前台继续运行。 -
bg(Background):让暂停的任务在后台继续运行(相当于当初命令后面加了&)。 -
兼容性:POSIX 标准。所有交互式 Shell 均支持。
适用场景
- 临时中断:编辑代码时需要临时执行 Shell 命令。
- 亡羊补牢:执行了一个耗时脚本忘了加
&,导致终端被卡死,不想杀掉重跑。
示例 1:Vim 的无缝切换
这是最高频的使用场景。
- 你在编辑 nginx 配置:
vim nginx.conf - 突然忘了 upstream 的 IP 是多少。不要退出 Vim! 直接按
Ctrl + z。[1]+ Stopped vim nginx.conf $ - 现在的你回到了 Shell 命令行。执行
ip addr或cat hosts查看你需要的信息。 - 看完了,输入
fg回车。 - 瞬间回到 Vim,光标位置、撤销历史全都还在,仿佛什么都没发生过。
示例 2:拯救卡死的终端
假设你运行了一个打包备份命令,本来以为很快,结果跑了 10 分钟还没完,终端一直被占用,你也无法输入其他命令。
# 糟糕,忘了加 '&',现在终端卡住了
$ tar -czf backup.tar.gz /data/images
... (光标闪烁,无法操作) ...# 1. 按 Ctrl + z 暂停它
[2]+ Stopped tar -czf backup.tar.gz /data/images# 2. 让它在后台继续跑 (Background)
$ bg
[2]+ tar -czf backup.tar.gz /data/images &# 3. 现在你可以继续用这个终端了,tar 命令会在后台默默完成
$ ls -lh
(注:熟练使用 Ctrl+z 和 fg,你会发现自己开启新终端窗口的频率大大降低,工作流变得极其连贯。)