linux kill & jobs

tthero00boo發表於2013-08-21
linux kill & jobs

1.獲得pid
方法一 :
$ ps -ef 
$ ps -aux
方法二 :
pgrep:(pgrep -l 更好)
一看到pgrep首先會想到什麼?沒錯,grep!pgrep的p表明了這個命令是專門用於程式查詢的grep。
$ pgrep firefox
1827
看到了什麼?沒錯火狐的PID,接下來又要打字了:
$kill -s 9 1827

2.殺掉程式

pkill:
看到pkill想到了什麼?沒錯pgrep和kill!pkill=pgrep+kill。
$pkill -9 firefox
說明:"-9" 即傳送的訊號是9,pkill與kill在這點的差別是:pkill無須 “s”,終止訊號等級直接跟在 “-“ 後面。

killall:
killall和pkill是相似的,不過如果給出的程式名不完整,killall會報錯。pkill或者pgrep只要給出程式名的一部分就可以終止程式。
$killall -9 firefox

格式:kill -l
列出所有訊號名稱(Print a list of signal names.  These are found in /usr/include/linux/signal.h)。只有第9種訊號(SIGKILL)才可以無條件終止程式,其他訊號程式都有權利忽略。下面是常用的訊號:
HUP     1    終端斷線
INT       2    中斷(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM    15    終止
KILL      9    強制終止
CONT   18    繼續(與STOP相反, fg/bg命令)
STOP    19    暫停(同 Ctrl + Z)
格式:kill -l
顯示指定訊號的數值。

格式:kill -9
格式:kill -KILL
強制殺掉指定程式,無條件終止指定程式。
 
格式:kill %
格式:kill -9 %
殺掉指定的任務(使用jobs命令可以列出)
 
格式:kill -QUIT
格式:kill -3
使得程式正常的退出。 

3. 任務jobs 掛起,終止
jobs命令用於顯示當前終端關聯的後臺任務情況。
命令後面跟上& 用於將命令在後臺執行。
Ctrl+Z用於將當前正在執行的前臺程式暫停,變成後臺程式。
bg [%n]用於將後臺暫停的程式繼續執行。
fg  [%n]用於將後臺執行的程式變成前臺程式。
kill %n用於殺掉指定的任務。

fg、bg、jobs、&、ctrl + z都是跟系統任務有關的,雖然現在基本上不怎麼需要用到這些命令,但學會了也是很實用的
一。& 最經常被用到
   這個用在一個命令的最後,可以把這個命令放到後臺執行
二。ctrl + z
     可以將一個正在前臺執行的命令放到後臺,並且暫停
三。jobs
     檢視當前有多少在後臺執行的命令
四。fg
     將後臺中的命令調至前臺繼續執行
   如果後臺中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後臺正在執行的命令的序號(不是pid)
五。bg
     將一個在後臺暫停的命令,變成繼續執行
   如果後臺中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後臺正在執行的命令的序號(不是pid) 

下列命令可以用來操縱程式任務:
  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支援的訊號。 

轉自 : http://blog.163.com/a7701@126/blog/static/20821732201276231717/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28859270/viewspace-768976/,如需轉載,請註明出處,否則將追究法律責任。

相關文章