在Linux中使用bashshell來管理前臺和後臺程序。您可以使用Bash的作業控制函式和訊號,使您能夠更靈活地執行命令。我們教你怎麼做。
每當一個程式在Linux或類似Unix的作業系統中執行時,就會啟動一個程序。“程序”是計算機記憶體中執行程式的內部表示形式的名稱。每個活動程式都有一個過程。事實上,在你的計算機上執行的幾乎所有東西都有一個程序。這包括圖形桌面環境(GDE)的元件,如GNOME或KDE,以及啟動時啟動的系統守護程序。
為什麼幾乎所有的東西都在執行?嗯,Bash內建的cd、pwd和alias在執行時不需要啟動(或“派生”)程序。Bash在終端視窗中執行的bashshell例項中執行這些命令。這些命令之所以快速,正是因為它們不需要啟動程序就可以執行。(您可以在終端視窗中鍵入help以檢視Bash內建的列表。)
程序可以在前臺執行,在這種情況下,它們會接管您的終端,直到它們完成為止,也可以在後臺執行。在後臺執行的程序不會控制終端視窗,您可以繼續在其中工作。或者至少,如果它們不生成螢幕輸出,就不會控制終端視窗。
我們將開始一個簡單的ping跟蹤執行。我們要ping How to Geek域。這將作為前臺程序執行。
ping www.tl80.cn我們得到預期的結果,向下滾動終端視窗。ping正在執行時,無法在終端視窗中執行其他操作。要終止命令,請按Ctrl+C。
Ctrl+C螢幕截圖中突出顯示了Ctrl+C的可見效果。平做了一個簡短的總結,然後停了下來。
讓我們重複一遍。但這次我們將按Ctrl+Z而不是Ctrl+C。任務不會終止。這將成為一項背景任務。我們控制了返回給我們的終端視窗。
ping www.tl80.cn Ctrl+Z點選Ctrl+Z的可見效果在螢幕截圖中突出顯示。
這一次,我們被告知程序停止了。停止並不意味著終止。就像一輛停在停車標誌處的汽車。我們還沒有把它報廢扔掉。它還在路上,靜止不動,等著走。這個過程現在是一個後臺作業。
jobs命令將列出當前終端會話中已啟動的作業。因為作業是(不可避免的)程序,我們也可以使用ps命令來檢視它們。讓我們使用這兩個命令並比較它們的輸出。我們將使用T選項(terminal)選項只列出在這個terminal視窗中執行的程序。請注意,不需要使用連字元-with-T選項。
jobs ps Tjobs命令告訴我們:
ps命令告訴我們:
以下是STAT列的常用值:
STAT列中的值後面可以跟有以下附加指標之一:
我們可以看到Bash的狀態是Ss。大寫的“S”告訴我們bashshell正在休眠,它是可中斷的。一旦我們需要它,它就會迴應。小寫的“s”告訴我們shell是會話的前導。
ping命令的狀態為T。這告訴我們ping已被作業控制訊號停止。在本例中,我們使用Ctrl+Z將其置於背景中。
ps T命令的狀態為R,表示running。+表示此程序是前臺組的成員。因此ps T命令正在前臺執行。
bg命令用於恢復後臺程序。它可以與工號一起使用,也可以不與工號一起使用。如果使用它時沒有作業編號,則預設作業將顯示在前臺。程序仍在後臺執行。您不能向它傳送任何輸入。
如果發出bg命令,我們將恢復ping命令:
bgping命令繼續,我們再次在終端視窗中看到滾動輸出。將為您顯示已重新啟動的命令的名稱。這在螢幕截圖中突出顯示。
但我們有個問題。任務正在後臺執行,不接受輸入。那我們怎麼阻止呢?Ctrl+C什麼都不做。我們可以看到它時,我們鍵入它,但後臺任務沒有收到這些擊鍵,所以它一直在愉快地ping遠離。
事實上,我們現在處於一種奇怪的混合模式。我們可以在終端視窗中鍵入內容,但是ping命令的滾動輸出會很快將我們鍵入的內容清除掉。我們鍵入的任何內容都會在早期生效。
為了停止我們的後臺任務,我們需要把它放到前臺,然後停止它。
fg命令將把後臺任務帶入前臺。就像bg命令一樣,它可以與作業編號一起使用,也可以不與作業編號一起使用。將其與作業編號一起使用意味著它將對特定作業進行操作。如果使用時沒有作業編號,則使用傳送到後臺的最後一個命令。
如果我們鍵入fg,ping命令將被帶到前臺。我們鍵入的字元與ping命令的輸出混合在一起,但是shell對它們進行操作,就好像它們像往常一樣在命令列中輸入一樣。事實上,從bashshell的角度來看,這正是所發生的事情。
fg現在ping命令再次在前臺執行,我們可以使用Ctrl+C來終止它。
Ctrl+C那可不太好。顯然,當程序不產生輸出且不需要輸入時,在後臺執行程序效果最好。
但是,不管是不是混亂,我們的例子確實做到了:
當您使用Ctrl+C和Ctrl+Z時,您正在向程序傳送訊號。這些是使用kill命令的簡寫方法。kill可以傳送64種不同的訊號。在命令列中使用kill-l列出它們。殺戮不是這些訊號的唯一來源。其中一些由系統中的其他程序自動引發
這裡有一些常用的。
我們必須使用kill命令來發出沒有指定組合鍵的訊號。
透過使用Ctrl+Z移到後臺的程序被置於stopped狀態。我們必須使用bg命令重新啟動它。作為正在執行的後臺程序啟動程式很簡單。在命令列末尾附加一個與號。
儘管後臺程序最好不要寫入終端視窗,但我們將使用這樣做的示例。我們需要在截圖中有一些我們可以參考的東西。此命令將作為後臺程序啟動一個無休止的迴圈:
而true;do echo“How To Geek Loop Process”;sleep 3;done&;
我們被告知程序的作業編號和程序ID。我們的作業編號是1,程序id是1979。我們可以使用這些識別符號來控制這個過程。
無窮迴圈的輸出開始出現在終端視窗中。和以前一樣,我們可以使用命令列,但是我們發出的任何命令都會與迴圈程序的輸出交錯在一起。
長征
為了停止我們的程序,我們可以使用jobs來提醒自己job編號是多少,然後使用kill。
jobs報告我們的流程是job number 1。要將這個數字與kill一起使用,我們必須在它前面加一個百分號%。
jobs kill %1kill將SIGTERM訊號(訊號編號15)傳送到程序並終止。下次按下回車鍵時,將顯示作業的狀態。它將程序列為“已終止”。如果程序不響應kill命令,則可以將其提升一個級別。將kill與SIGKILL一起使用,訊號號9。把數字9放在kill命令和作業號之間。
kill 9 %1相關:如何從Linux終端終止程序
... 在這裡,您將瞭解什麼是crontab,如何新增自動化作業,以及一些實際示例。 ...
...好的程式會讓殭屍程序潛伏在Linux計算機中。瞭解殭屍是如何產生的,以及如何讓它們最終安息。 程序狀態如何在linux上工作 當然,Linux必須跟蹤計算機上執行的所有應用程式和守護程序。其中一種方法是維護程序表。這是核...
...視窗推到後臺(稱為“分離”)。當你想看到你的程序是如何進行的,你可以把視窗拉到前臺(“重新連線”)並再次使用它。這對於您不希望透過關閉終端視窗意外終止的長程序來說非常有用。 一旦運行了螢幕會話,就可以...
殺死一個程序有時是擺脫它的唯一方法。儘管名字很刺耳,“殺死”一個程序只是意味著“強迫它退出”。 什麼是過程(a process)? 執行諸如web瀏覽器之類的程式、與桌面環境相關聯的後臺程序以及Linux系統服務都是程序。 您可...
...工具。不管你在單人遊戲中作弊。 PunkBuster不僅僅檢視PC上執行的程序,它還可以檢查您是否修改了遊戲檔案。它的設計是為了打擊那些作弊的“朋克”。畢竟,在網路遊戲中被作弊的人踩著是不好玩的。 punkbuster什麼時候啟用?...
...程序。 所以Duet活動排程器可以幫助管理後臺活動,但是如何管理呢?一篇關於Eclectic Light Company的帖子解釋了macOS如何執行後臺應用程式。下面是is所說的: Duet Activity Scheduler (DAS) maintains a scored list of background activities which usually c...
...掘指令碼。它的挖掘速度會慢一些,但網站可以做到。 如何保護自己免受瀏覽器中的加密竊取 我們建議執行安全軟體,自動阻止加密貨幣礦工在您的瀏覽器。例如,Malwarebytes會自動阻止CoinHive和其他加密貨幣挖掘指令碼,從而...