一、& 最經常被用到
這個用在一個指令的最後,可以把這個指令放到背景執行
二、ctrl + z
可以将一個正在前台執行的指令放到背景,并且暫停
三、jobs
檢視目前有多少在背景運作的指令
四、fg
将背景中的指令調至前台繼續運作
如果背景中有多個指令,可以用 fg %jobnumber将選中的指令調出,%jobnumber是通過jobs指令查到的背景正在執行的指令的序号(不是pid)
五、bg
将一個在背景暫停的指令,變成繼續執行
如果背景中有多個指令,可以用bg %jobnumber将選中的指令調出,%jobnumber是通過jobs指令查到的背景正在執行的指令的序号(不是pid)
Linux下使用Shell指令控制任務Jobs執行
下列指令可以用來操縱程序任務:
ps 列出系統中正在運作的程序;
kill 發送信号給一個或多個程序(經常用來殺死一個程序);
jobs 列出目前shell環境中已啟動的任務狀态,若未指定jobsid,則顯示所有活動的任務狀态資訊;如果報告了一個任務的終止(即任務的狀态被标記為Terminated),shell 從目前的shell環境已知的清單中删除任務的程序辨別;
bg 将程序搬到背景運作(Background);
fg 将程序搬到前台運作(Foreground);
将job轉移到背景運作
如果你經常在X圖形下工作,你可能有這樣的經曆:通過終端指令運作一個GUI程式,GUI界面出來了,但是你的終端還停留在原地,你不能在shell中繼續執行其他指令了,除非将GUI程式關掉。
為了使程式執行後終端還能繼續接受指令,你可以将程序移到背景運作,使用如下指令運作程式: #假設要運作xmms
$xmms &
這樣打開xmms後,終端的提示又回來了。現在xmms在背景運作着呢;但萬一你運作程式時忘記使用“&”了,又不想重新執行;你可以先使用ctrl+z挂起程式,然後敲入bg指令,這樣程式就在背景繼續運作了。
概念:目前任務
如果背景的任務号有2個,[1],[2];如果當第一個背景任務順利執行完畢,第二個背景任務還在執行中時,目前任務便會自動變成背景任務号碼“[2]”的背景任務。是以可以得出一點,即目前任務是會變動的。當使用者輸入“fg”、“bg”和“stop”等指令時,如果不加任何引号,則所變動的均是目前任務。
察看jobs
使用jobs或ps指令可以察看正在執行的jobs。
jobs指令執行的結果,+表示是一個目前的作業,減号表是是一個目前作業之後的一個作業,jobs -l選項可顯示所有任務的PID,jobs的狀态可以是running, stopped, Terminated,但是如果任務被終止了(kill),shell 從目前的shell環境已知的清單中删除任務的程序辨別;也就是說,jobs指令顯示的是目前shell環境中所起的背景正在運作或者被挂起的任務資訊;
程序的挂起
背景程序的挂起:
在solaris中通過stop指令執行,通過jobs指令檢視job号(假設為num),然後執行stop %num;
在redhat中,不存在stop指令,可通過執行指令kill -stop PID,将程序挂起;
當要重新執行目前被挂起的任務時,通過bg %num 即可将挂起的job的狀态由stopped改為running,仍在背景執行;當需要改為在前台執行時,執行指令fg %num即可;
前台程序的挂起:
ctrl+Z;
程序的終止
背景程序的終止:
方法一:
通過jobs指令檢視job号(假設為num),然後執行kill %num
方法二:
通過ps指令檢視job的程序号(PID,假設為pid),然後執行kill pid
前台程序的終止:
ctrl+c
kill的其他作用
kill除了可以終止程序,還能給程序發送其它信号,使用kill -l 可以察看kill支援的信号。
SIGTERM是不帶參數時kill發送的信号,意思是要程序終止運作,但執行與否還得看程序是否支援。如果程序還沒有終止,可以使用kill -SIGKILL pid,這是由核心來終止程序,程序不能監聽這個信号。