2008年9月9日 星期二

工作管理 - 前景&背景執行

在很多情況,在執行一個程式之後,例如是telnet後,突然想到其它事,需要shell來讓你打其它指令~這個時候又不能把telnet關掉~我們有一個辦法,就是把它踢到背景去執行~這個時候我們就可以用shell了~

基本上我們執行一個指令,通常會等到執行結束,系統才會歸還shell給我們~

[root@host ~]# telnet ptt.twbb.org


但是,如果我們要一開始執行這一個指令就是在背景執行,就是要用到&這一個關鍵字

例:一開始執行telnet就是在背景執行

[root@host ~]# telnet ptt.twbbs.org &


我們如何知道現在有哪一些背景程式在執行哩?

[root@host ~]# jobs
[1]-  Stopped                 telnet ptt.twbbs.org
[2]   Running                 find / -name good &
[3]+  Stopped                 sudo updatedb


而那個 + 代表目前在背景下預設被取用的那個工作 (與 fg 這個指令有關 )!

那我如何把find的這一個程序呼叫到前景來執行哩~要用到fg的指令。因為,它的序位是2所以我們要打以下指令

[root@host ~]# fg %2


而相反的,把前景的程序踢到背景暫停,就必需要用到快捷鍵ctrl+z,注意喔~它目前是在背景中暫停,但是,沒有執行喔~

那如何讓它在背景中執行哩~那就要用到bg的指令囉~

[root@host ~]# bg %3

這個時候編號第三的程序就會在背景中執行了~

若突然想要中止程序,那就必需kill的指令

[root@host ~]# kill -9 %3

特別留意一下, -9 這個 signal 通常是用在『強制刪除一個不正常的工作』時所使用的, -15 則是以正常步驟結束一項工作(15也是預設值),兩者之間並不相同呦!
舉上面的例子來說, 我用 vi 的時候,不是會產生一個 .filename.swp 的檔案嗎? 那麼,當使用 -15 這個 signal 時, vi 會嘗試以正常的步驟來結束掉該 vi 的工作, 所以 .filename.swp 會主動的被移除,但若是使用 -9 這個 signal 時, 由於該 vi 工作會被強制移除掉,因此, .filename.swp 就會繼續存在檔案系統當中。 這樣您應該可以稍微分辨一下了吧?

所以,基本上我若要用kill,我都先不會打-9的參數,若真的殺不掉,再打-9的參數吧~
參考資料:
多工環境
鳥哥的Linux私房菜 - 程序與資源管理

沒有留言: