Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 前後台作業控制完全掌握:&、Ctrl+Z、jobs、fg、bg、kill 實戰速查表

編輯:Linux 教學

終端裡跑著編譯、備份、下載,想切回去改代碼卻發現被佔用?掌握 Shell 作業控制,讓你像指揮交響樂團一樣調度前後台任務。本文系統整理 &、Ctrl+Z、jobs、fg、bg、kill 核心指令與進階技巧,附狀態流轉圖與常見坑點。

一、核心指令速查表

指令/操作功能典型場景
cmd &啟動命令並**直接放入後台**運行 (不佔用終端)長時間編譯、下載、服務啟動
Ctrl+Z**暫停**前台任務,返回 Shell 提示符誤以前台啟動、需臨時切換其他操作
jobs -l列出當前 Shell 環境的所有作業 (含 PID、狀態、編號)查看有哪些後台/暫停任務
fg %n將作業 %n (jobs 編號) **調回前台**繼續運行恢復互動式程式 (vim, top, python 交互)
bg %n將**暫停**的作業 %n 在**後台繼續**運行Ctrl+Z 暫停後,改為後台不佔用終端
kill %n終止作業 %n (預設送 SIGTERM)正常結束後台任務
kill -9 %n強制終止 (SIGKILL,核心直接回收,進程無法捕捉)卡死、無法正常退出的任務

二、作業狀態流轉圖

[啟動 cmd &]  ──→  Running (背景)
[啟動 cmd]    ──→  Running (前台)  ──[Ctrl+Z]──→  Stopped  ──[bg %n]──→  Running (背景)
                                                            │
                                                            └─[fg %n]──→  Running (前台)
Stopped / Running (背景) ──[kill %n]──→  Terminated  ──(Shell 自動移除 jobs 列表)

三、實戰範例演練

$ ./tcpserv01 &                 # [1] 12345  (立即返回提示符,後台運行)
$ ./tcpserv01                   # 前台運行,佔用終端
^Z                              # 用戶按 Ctrl+Z
[1]+  Stopped  ./tcpserv01
$ bg %1                         # 讓作業 1 後台繼續
[1]+  ./tcpserv01 &
$ jobs -l
[1]+  12345 Running  ./tcpserv01 &
$ fg %1                         # 切回前台 (需互動時)
./tcpserv01
^Z                              # 再次暫停
$ kill %1                       # 結束它
[1]+  Terminated  ./tcpserv01

四、進階技巧與避坑指南

  1. 作業編號 vs PID:jobs 顯示 [1] [2] 為**作業編號** (Shell 內部),kill %1 用百分號引用;ps/kill 12345 用 **PID** (核心層)。**切勿混淆**。
  2. 當前作業標記:jobs 輸出中 + 表示「當前作業」 (最近操作),- 表示「前一作業」。fg/bg 不加參數時操作「當前作業」。
  3. SIGHUP 與 nohup:關閉終端 (SSH 斷線) 會向前台進程組發送 SIGHUP,導致後台任務意外退出。
    解法:nohup cmd & 或 先 Ctrl+Z → bg → disown -h %1 (標記不接收 SIGHUP)。
  4. screen/tmux 才是長時任務正解:作業控制僅限單一 Shell 會話,斷線即失效。**生產環境長時任務請直接用 screen -S task 或 tmux new -s task**。
  5. kill 信號大全:kill -l 列出所有。常用 SIGTERM (15) 正常結束、SIGKILL (9) 強制殺死、SIGSTOP (19) 暫停 (不可捕捉)、SIGCONT (18) 繼續。

五、腳本化批量管理範例

# 終止所有名為 tcpserv 的後台作業
for j in $(jobs -p | xargs -I{} ps -o pid= -p {} | xargs -I{} sh -c 'ps -o comm= -p {} | grep -q tcpserv && echo {}'); do
    kill $j
done

結語

作業控制是 Shell 互動式操作的核心技能。熟練掌握 &、Ctrl+Z、jobs、fg/bg、kill,配合 disown、nohup、screen/tmux,即能在單一終端輕鬆並行十數任務,從容應對開發、運維、除錯的多重場景切換。

Copyright © Windows教程網 All Rights Reserved