天天看點

『學了就忘』Linux系統管理 — 85、工作管理相關指令

目錄

1、工作管理簡介

2、如何把指令放入背景

3、背景管理指令

(1)檢視背景的工作

(2)将背景暫停的工作恢複到前台執行

(3)把背景暫停的工作恢複到背景執行

4、背景指令脫離登入終端運作

簡單的說,工作管理就是管理前台的任務和背景的任務。

背景管理有幾個重要事項需要注意:

前台是指目前可以操控和執行指令的這個操作環境,背景是指工作可以自行運作,但是不能直接用<code>ctrl+c</code>來終止它,隻能使用<code>fg/bg</code>來調用工作。

目前的登入終端,隻能管理目前終端的工作,而不能管理其他登入終端的工作。如<code>tty1</code>登入的終端,是不能管理<code>tty2</code>終端中的工作的。

也就是說哪一個終端放入背景運作的程式,隻有這個終端能檢視到,其他的終端是檢視不到該程式的。

該終端一關閉,由這個終端放入背景運作的程式也會終止。

也可以關閉終端讓其放入背景的程式不終止,在本文第4點。

放入背景的指令必須可以持續運作一段時間,這樣我們才能撲捉和操作這個工作。如果把<code>ls</code>指令放入背景執行,它很快就會執行完成,我們很難操作它。

放入背景執行的指令不能和前台使用者有互動或需要前台輸入,否則放入背景隻能暫停,而不能執行。比如<code>vim</code>指令放入背景隻能暫停,而不能執行,因為<code>vim</code>需要前台輸入資訊。

還有一個<code>top</code>指令也不能放入背景執行,而隻能放入背景暫停,因為<code>top</code>指令需要和前台有互動。

也就是說,不是所有的指令都是可以在背景執行的, 隻有這個程式不需要使用者介入才可以。比如說:打包壓縮、程式安裝等。(重點)

有兩種方法,分别如下:

(1)方式一

使用<code>指令 &amp;</code>,把指令放入背景。

執行第一種把指令放入背景的方法是在指令後面加入<code>空格&amp;</code>,這種方法放入背景的指令,在背景是執行狀态。

但是注意,放入背景執行的指令不能與前台有互動,否則這個指令是不能在背景執行的。

舉個例子:

這樣的好處,雖然tar指令在執行,但是目前終端我還是可以進行其他指令操作的。

(2)方式二

第二種方法是在指令執行過程中按<code>ctrl+z</code>快捷鍵,指令在背景是暫停狀态。

使用這種方法放入背景的指令,就算是不和前台有互動,能在背景執行的指令,也是暫停狀态。換句話說就是把一個服務先暫停,在放入背景。

<code>ctrl+z</code>快捷鍵就是暫停的快捷鍵。

示例:

通過<code>ps aux</code>指令也可以看到該程序。可以看他該程序的狀态是<code>T</code>,停止狀态。

如下圖所示:

『學了就忘』Linux系統管理 — 85、工作管理相關指令

也就是說,執行這個指令的程序就會一直卡在這。

你可以強制把這個程序kill掉,也可以把該程序恢複到前台繼續進行操作(下一點會說明)。

使用<code>jobs</code>指令,如下:

使用<code>fg</code>指令,如下:

使用<code>bg</code>指令,如下:

提示 你也可以直接把終端關閉掉,這些通過該終端被放入背景的工作,也會消失。 當然這不是正确關閉背景工作的方式。還是應該正确終止背景工作之後,再關閉終端。

我們已經知道把指令放入背景,隻能在目前登入終端執行。

那如果我是遠端管理的伺服器,在遠端終端中執行了背景指令,這時我登出,這個背景指令就不能繼續執行了,這個背景指令會被終止。

但是我們确實需要在遠端終端中執行某些背景指令,使這些指令在關閉終端的時候,也能夠繼續執行。

該如何執行呢?

第一種方法是把需要背景執行的指令加入<code>/etc/rc.local</code>檔案,讓系統在啟動時執行這個背景程式。

這種方法的問題是,伺服器時不能随便重新開機的,萬一有臨時背景任務,伺服器不能重新開機,就不能執行。

第二種方法是使用系統定時任務,讓系統在指定的時間執行某個背景指令。

這樣放入背景的指令與終端無關,是不依賴登入終端的。

第三種方法是使用<code>nohup</code>指令

<code>nohup</code>指令的作用就是讓背景工作在離開操作終端時,也能夠正确的在背景執行。

指令的格式如下:

常見的還是用第三種方式處理。