在很多情況,在執行一個程式之後,例如是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私房菜 - 程序與資源管理
[转]总述基金选择的步骤
16 年前
沒有留言:
張貼留言