天天看點

Linux Ctrl+z jobs bg fg &使用及差別

一、& 最經常被用到

這個用在一個指令的最後,可以把這個指令放到背景執行

二、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,這是由核心來終止程序,程序不能監聽這個信号。

繼續閱讀