Linux中作業控制命令


開門見山,最近.NET勸退師要在linux上寫些長時間運行的腳本,獲取Azure BlobStorage存儲的數據。
記錄一下Linux中后台執行作業的命令。

Linux作業

作業(Job)是shell管理的進程(每個job都有一個關聯的PID),每個作業會被分配一個線性job ID。
有兩種形式的作業:

  1. Foreground: 當你在終端窗口輸入命令,這個命令將會占據終端窗口,直到命令執行完成, 這是一個前台Job
  2. Background: 當你在命令后面添加& 符號,命令將不會占據終端窗口(你可在shell prompt繼續輸入),這是一個后台Job

Linux作業控制命令

使用作業控制命令,您可以在Shell中運行和管理多個作業。但是你只能在啟動作業的Shell中使用作業控制命令

命令 描述
jobs 列出所有的Job, 后面可接參數進行過濾
bg %n 將當前/指定Job放置到后台運行
fg %n 將當前/指定Job帶到前台運行

另外還有一些與作業有關的快速操作:

  1. & : 讓命令或者腳本在后台運行
  2. Ctrl+Z: 中斷前台作業,並放置在后台
  3. Ctrl+C: 終止當前前台作業
  4. nohup: 即使關閉終端也會執行(一般搭配上面的&)

在后台運行作業

在原命令的最后加上 &,可讓這個作業在后台運行。 下面的例子:在后台執行sleep命令

$ sleep 100 & 
[1] 14488

shell返回結果: 中括號內是job ID, 后面是PID;
之后使用jobs命令查看狀態: 100s之后這個后台作業執行完成

[root@recv-data recv]# jobs
[1]+  Running                 sleep 100 &
....
[root@recv-data recv]# jobs
[1]+  Done                    sleep 100

管理作業

對於前台作業,
執行Ctrl+Z可以將前台作業中止,並放置在后台; 之后可以使用bg %n命令讓中止的后台作業跑起來。

# 將前台作業中止,並放置到后台
$ sleep 100
^Z
[1]+  Stopped                 sleep 100

$ jobs
[1]+  Stopped                 sleep 100

# bg命令讓后台中止的作業跑起來
$ bg % 1
[1]+ sleep 100 &

處於后台的作業,fg %n切換回前台執行。

# 下面顯示一個正在運行的后台作業
$ jobs
[1]+  Running                 sleep 100 &

# 切換回前台運行
$ fg %1
sleep 100


眾所周知, Ctrl+C終止當前前台作業,不多說。

nohup:關閉終端也執行

很多時候,你是通過ssh登錄到遠程服務器,再執行Shell腳本或命令,如果你退出了終端(終止遠程連接),則該進程/命令將被殺死。如果不確定該作業何時完成,則最好讓該作業在后台運行,但是,如果你退出系統,該作業將被Shell停止並終止,當進程收到SIGHUP時,如何使作業在后台運行?

這個時候,我們就要使用nohup命令,讓我們長時間運行的Shell腳本或命令在我們退出系統依舊能執行(此時一般搭配&后台執行)。

顧名思義:nohup是用於忽略HUP(掛斷)信號的POSIX命令。

總結:

  • 只能在初始化作業的shell里管控作業
  • fg %n / bg %n 切換前后台作業
  • nohup & 搭配,幫助長時間后台運行的作業,在你退出系統,依舊可運行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM