2009年11月17日

process(程序)管理(3)

job control,何謂job,其實好像沒有太嚴格的定義XD,我一般把他當作process的同義詞,或者說一串執行的指令(就不只一個process了),比方說使用awk把/etc/passwd的前一個欄位抓出來並且排序,這樣是一件工作,但是至少就要有awk跟sort兩個processes
如果今天再執行一個要很長執行時間的工作,這時候又有一個比較重要的工作要做的時候,需要先把這個工作放到背景暫停起來,執行優先的動作。比方說你正在備份資料,可是老闆說要看今天的報表,那你只好先把備份的工作站停,然後先去弄報表。只要一個簡單的ctrl+z就可以把目前的工作變成暫停(stopped)的狀態放到背景去
另外一種狀況可能是你再執行一個很長的時間的搜尋,你總不希望他一直佔用的console畫面,讓你不能執行一些其他的工作,linux可是一個多工的作業系統,其實很簡單,只要在指令最後加上&就可以了,這時候工作並不會停止,他會在背景執行(running)
但是如果你使用了上面的方式,你就看不到輸出了,怎麼知道目前我放了哪些工作在背景呢?linux提供了jobs指令,他會給每個工作一個編號,後面fg指令用的到
jobs -l
列出所有背景工作
jobs -r
列出所有背景執行中(&/running)的工作
jobs -s
列出所有暫停(ctrl+z/stopped)在背景的工作

知道了之後當然會想要把他們拿出來用,那怎麼辦呢?fg指令就是把目前在背景的工作帶到前面的指令使用fg %#,比方說fg %3,就是把編號3的工作拿到前景來
如果說想要讓背景的工作由暫停變成執行,但卻不要帶到前景,那可以用bg %#,比方說bg %2是個備份指令,就讓他繼續在背景執行吧

如果不幸這工作因為某些原因,出了問題,想要直接終止他怎麼辦呢?就使用之前的kill指令kill -signal %#,比方說kill -9 %3這樣

沒有留言: