【Linux】工做管理

  • 在進行工做管理的行爲中,其實每一個工做都是目前bash的子進程,即彼此間是有相關性的。咱們沒法以job control的方式由tty1的環境去管理tty2的bash
  • 當只有一個終端時,能夠出現提示符讓你操做的環境就稱爲前臺(foreground),至於其餘工做就可讓你放入後臺(background)去暫停或運行。要注意的是,放入後臺的工做想要運行時,它必須不可以與用戶互動。舉例來講,vim絕對不能夠在後臺裏面執行(running)。由於你沒有輸入數據它就不會跑。並且放入後臺的工做是不可使用[ctrl]+c來終止的。總之,要進行bash的job control 必需要注意到的限制是:
  • 這些工做所觸發的進程必須來自於你shell的子進程(只管理本身的bash);
  • 前臺:你能夠控制與執行命令的這個環境稱爲前臺(foreground)的工做;
  • 後臺:能夠本身運行的工做,你沒法使用[ctrl]+c終止它,可以使用bg/fg調用該工做;
    後臺中『執行』的進程不能等待terminal/shell的輸入(input)

實際運行job控制的命令

直接將命令丟到後臺中『執行』的&
$tar -rpcf /tmp/etc.tar.gz /etc &
[1] 8400 <== [job number]/PID
#在中括號內的號碼爲工做號碼(job number),該號碼與bash的控制有關
#後續的8400則是這個工做在系統中的PID
  • 在輸入一個命令後,在該命令的最後面加上一個『&』表明將該命令丟到後臺中,此時bash會給予這個命令一個"工做號碼"(job number),就是那個[1]。至於後面那個8400則是該命令所觸發的PID了。
  • 若是輸入幾個命令後,忽然出現以下數據
[1]+ Done tar -rpcf /tmp/etc.tar.gz /etc

就表明這個[1]工做已經完成了。shell

將目前工做丟到後臺中『暫停』:[ctrl]+z
  • 按下[ctrl]+z後,屏幕上會出現以下[1]+ Stopped command[1]表示這是第一個工做。而那個+表明最近一個被丟進後臺的工做,且目前在後臺默認會被取用的那個工做(與fg這個命令有關)。而那個Stopped則表明目前這個工做的狀態。在默認狀態下,使用[ctrl]+z丟到後臺中的工做都是「暫停」的。
查看目前的後臺工做狀態:jobs
$jobs [-lrs]
參數:
-l:除了列出job number與命令串以外,同時列出PID的好嗎
-r:僅列出正在後臺run的工做
-s:僅列出正在後臺當中暫停(stop)的工做

查看目前的bash當中,全部的工做,與對應的PID
  • 用jobs這個命令能夠查看後臺中的工做,若是想要知道該job number的PID號碼,能夠加上-l這個參數。在輸出的信息當中,有些任務號碼後會有+-號碼,+號表明最近被放到後臺的工做號碼,-表明最近最後第二個被放置到後臺中的工做號碼。而超過最後第三個之後的工做,就不會有+/-符號的存在了。
將後臺工做拿到前臺來處理:fg

fg %jobnumber
參數:
%jobnumber:jobnumber爲工做號碼(數字)。注意,那個%是無關緊要的。vim

先以jobs查看工做,再將工做取出
$jobs
[1]- 10314 Stopped vim ~/.bashrc
[2]+ 10833 Stopped  find / -print
$fg <==默認取出那個+的工做,即[2]
$fg %1 <==直接規定取出的那個工做號碼!
讓工做在後臺的狀態變成運行中:bg
  • bg %jobnumber將jobnumer的工做在後臺啓用
相關文章
相關標籤/搜索