網路農夫 --  Home 網路農夫 --  Home
網路農夫 --  Home
wait.....

3-7-2 背景工作(background jobs)

要將一個指令放到背景工作去執行,其實非常簡單。只要在指令的最後面加上符號“&”便可。當你 rutern 後會將馬上顯示一個訊息,並且下一個提語(prompt)也會馬上出現。如下例:

2 % tar cvf /dev/rst8 /home |& tee tar.tmp >& /dev/null &
[1] 293 294
3 %

在上面的指令中你可看到三個“&”符號,只有第三個才將指令放到背景工作中執行(第一個與第二個它代表的義意是標準錯誤訊息,千萬別搞亂了)。在指令執行後所出現的訊息,“[1]”則是代表背景工作的工作號碼;“293”與 “294”則表示該工作在系統中所執行的 PID(process ID)號碼。這指令的作用在備份目錄“/home”下所有的資料,並將指令 tar 的輸出(含標準錯誤訊息)以指令 tee 存放到 tar.tmp 檔案,並將輸出重導向到“/dev/null”這個無底垃圾箱去,避免輸出訊息干擾到前景工作的進行。

 

當指令以放到背景工作中執行,我們就不需等待該指令執行完成,便可馬上繼續下指令來查詢 process 的處理情況。我們所得如下:

3 % ps
PID TT STAT TIME COMMAND
290 p0 S 0:00 -csh (csh)
293 p0 D 0:00 tar cvf /dev/rst8 /home1
294 p0 S 0:00 tee tar.tmp
295 p0 R 0:00 ps

由上的結果顯示該背景工作的 process 在系統中的處理狀態。另外我們可用 C Shell 的內建指令 job 來顯示背景工作的狀態。如下:

 

4 % jobs
[1] + Running tar cvf /dev/rst8 /home1 |& tee tar.tmp >& /dev/null

 

指令 jobs 的訊息:“[1]”代表背景工作號碼,“+”符號代表“current job”,如果是出現符號“-”則代表“previous job”。再來便是背景工作的執行情況“Running”,最後則是背景工作的指令。當指令在背景工作中執行時,當它正常執行完畢後會產生訊息,告訴你背景工作已經執行完畢。如下指令 5 後的第二行訊息便是。

5 % pwd
/home1/akira
[1] Done tar cvf /dev/rst8 /home1 |& tee tar.tmp >& /dev/null
6 %

當然背景工作不是止能執行一個而以,你可連續將各種工作用符號“&”將它們放到背景工作內執行。

 

版本:Beta-2001-05 -- 網路農夫