如何在linux上執行和控制後臺程序

在Linux中使用bashshell來管理前臺和後臺程序。您可以使用Bash的作業控制函式和訊號,使您能夠更靈活地執行命令。我們教你怎麼做。...

在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

如何在linux上執行和控制後臺程序

我們得到預期的結果,向下滾動終端視窗。ping正在執行時,無法在終端視窗中執行其他操作。要終止命令,請按Ctrl+C。

Ctrl+C

如何在linux上執行和控制後臺程序

螢幕截圖中突出顯示了Ctrl+C的可見效果。平做了一個簡短的總結,然後停了下來。

讓我們重複一遍。但這次我們將按Ctrl+Z而不是Ctrl+C。任務不會終止。這將成為一項背景任務。我們控制了返回給我們的終端視窗。

ping www.tl80.cn Ctrl+Z

如何在linux上執行和控制後臺程序

點選Ctrl+Z的可見效果在螢幕截圖中突出顯示。

這一次,我們被告知程序停止了。停止並不意味著終止。就像一輛停在停車標誌處的汽車。我們還沒有把它報廢扔掉。它還在路上,靜止不動,等著走。這個過程現在是一個後臺作業。

jobs命令將列出當前終端會話中已啟動的作業。因為作業是(不可避免的)程序,我們也可以使用ps命令來檢視它們。讓我們使用這兩個命令並比較它們的輸出。我們將使用T選項(terminal)選項只列出在這個terminal視窗中執行的程序。請注意,不需要使用連字元-with-T選項。

jobs ps T

如何在linux上執行和控制後臺程序

jobs命令告訴我們:

  • [1] :方括號中的數字是作業編號。當我們需要用作業控制命令來控制它時,我們可以使用它來引用作業。
  • +:加號+表示如果使用沒有特定作業編號的作業控制命令,將對該作業執行操作。它被稱為預設作業。預設作業始終是最近新增到作業列表中的作業。
  • 已停止:程序未執行。
  • 發出砰的聲響www.tl80.cn:啟動程序的命令列。

ps命令告訴我們:

  • PID:程序的程序ID。每個程序都有一個唯一的ID。
  • TTY:執行程序的偽電傳打字機(終端視窗)。
  • STAT:程序的狀態。
  • 時間:程序消耗的CPU時間量。
  • 命令:啟動程序的命令。

以下是STAT列的常用值:

  • D:不間斷睡眠。程序處於等待狀態,通常等待輸入或輸出,不能被中斷。
  • I:閒置。
  • R:跑步。
  • S:可中斷睡眠。
  • T:被作業控制訊號停止。
  • Z:殭屍程式。程序已終止,但尚未被其父程序“清除”。

STAT列中的值後面可以跟有以下附加指標之一:

  • <:高優先順序任務(對其他程序不好)。
  • N:低優先順序(對其他程序很好)。
  • L:程序將頁鎖定到記憶體中(通常由實時程序使用)。
  • 學生:一個課長。會話負責人是啟動了流程組的流程。shell是會話領導者。
  • l:多執行緒程序。
  • +:前臺程序。

我們可以看到Bash的狀態是Ss。大寫的“S”告訴我們bashshell正在休眠,它是可中斷的。一旦我們需要它,它就會迴應。小寫的“s”告訴我們shell是會話的前導。

ping命令的狀態為T。這告訴我們ping已被作業控制訊號停止。在本例中,我們使用Ctrl+Z將其置於背景中。

ps T命令的狀態為R,表示running。+表示此程序是前臺組的成員。因此ps T命令正在前臺執行。

bg命令

bg命令用於恢復後臺程序。它可以與工號一起使用,也可以不與工號一起使用。如果使用它時沒有作業編號,則預設作業將顯示在前臺。程序仍在後臺執行。您不能向它傳送任何輸入。

如果發出bg命令,我們將恢復ping命令:

bg

如何在linux上執行和控制後臺程序

ping命令繼續,我們再次在終端視窗中看到滾動輸出。將為您顯示已重新啟動的命令的名稱。這在螢幕截圖中突出顯示。

如何在linux上執行和控制後臺程序

但我們有個問題。任務正在後臺執行,不接受輸入。那我們怎麼阻止呢?Ctrl+C什麼都不做。我們可以看到它時,我們鍵入它,但後臺任務沒有收到這些擊鍵,所以它一直在愉快地ping遠離。

如何在linux上執行和控制後臺程序

事實上,我們現在處於一種奇怪的混合模式。我們可以在終端視窗中鍵入內容,但是ping命令的滾動輸出會很快將我們鍵入的內容清除掉。我們鍵入的任何內容都會在早期生效。

為了停止我們的後臺任務,我們需要把它放到前臺,然後停止它。

fg命令

fg命令將把後臺任務帶入前臺。就像bg命令一樣,它可以與作業編號一起使用,也可以不與作業編號一起使用。將其與作業編號一起使用意味著它將對特定作業進行操作。如果使用時沒有作業編號,則使用傳送到後臺的最後一個命令。

如果我們鍵入fg,ping命令將被帶到前臺。我們鍵入的字元與ping命令的輸出混合在一起,但是shell對它們進行操作,就好像它們像往常一樣在命令列中輸入一樣。事實上,從bashshell的角度來看,這正是所發生的事情。

fg

如何在linux上執行和控制後臺程序

現在ping命令再次在前臺執行,我們可以使用Ctrl+C來終止它。

Ctrl+C

如何在linux上執行和控制後臺程序

我們需要發出正確的訊號

那可不太好。顯然,當程序不產生輸出且不需要輸入時,在後臺執行程序效果最好。

但是,不管是不是混亂,我們的例子確實做到了:

  • 把一個過程放到後臺。
  • 在後臺將程序恢復到執行狀態。
  • 將程序返回前臺。
  • 正在終止程序。

當您使用Ctrl+C和Ctrl+Z時,您正在向程序傳送訊號。這些是使用kill命令的簡寫方法。kill可以傳送64種不同的訊號。在命令列中使用kill-l列出它們。殺戮不是這些訊號的唯一來源。其中一些由系統中的其他程序自動引發

這裡有一些常用的。

  • 訊號1。當正在執行的終端關閉時自動傳送到程序。
  • 訊號:訊號2。傳送到您按Ctrl+C的程序。程序被中斷並被告知終止。
  • 訊號3。如果使用者傳送退出訊號Ctrl+D,則傳送到程序。
  • 訊號9。程序將立即終止,並且不會嘗試乾淨地關閉。這個過程並不順利。
  • 訊號終端:訊號15。這是kill傳送的預設訊號。它是標準的程式終止訊號。
  • SIGTSTP:訊號20。使用Ctrl+Z時傳送到程序。它停止程序並將其置於後臺。

我們必須使用kill命令來發出沒有指定組合鍵的訊號。

進一步的作業控制

透過使用Ctrl+Z移到後臺的程序被置於stopped狀態。我們必須使用bg命令重新啟動它。作為正在執行的後臺程序啟動程式很簡單。在命令列末尾附加一個與號。

儘管後臺程序最好不要寫入終端視窗,但我們將使用這樣做的示例。我們需要在截圖中有一些我們可以參考的東西。此命令將作為後臺程序啟動一個無休止的迴圈:

而true;do echo“How To Geek Loop Process”;sleep 3;done&amp;

如何在linux上執行和控制後臺程序

我們被告知程序的作業編號和程序ID。我們的作業編號是1,程序id是1979。我們可以使用這些識別符號來控制這個過程。

無窮迴圈的輸出開始出現在終端視窗中。和以前一樣,我們可以使用命令列,但是我們發出的任何命令都會與迴圈程序的輸出交錯在一起。

長征

如何在linux上執行和控制後臺程序

為了停止我們的程序,我們可以使用jobs來提醒自己job編號是多少,然後使用kill。

jobs報告我們的流程是job number 1。要將這個數字與kill一起使用,我們必須在它前面加一個百分號%。

jobs kill %1

如何在linux上執行和控制後臺程序

kill將SIGTERM訊號(訊號編號15)傳送到程序並終止。下次按下回車鍵時,將顯示作業的狀態。它將程序列為“已終止”。如果程序不響應kill命令,則可以將其提升一個級別。將kill與SIGKILL一起使用,訊號號9。把數字9放在kill命令和作業號之間。

kill 9 %1

我們討論過的事情

  • Ctrl+C:如果程序正在接受輸入,則向程序傳送SIGINT,即訊號2,並告訴它終止。
  • Ctrl+D:如果程序正在接受輸入,則向程序傳送SISQUIT,訊號3,並告訴它退出。
  • Ctrl+Z:將SIGSTP(訊號20)傳送到程序,並告訴它停止(掛起)併成為後臺程序。
  • 作業:列出背景作業並顯示其作業編號。
  • bg作業編號:重新啟動後臺程序。如果不提供作業編號,則使用最後一個轉換為後臺任務的程序。
  • fg job\ u number:將後臺程序帶入前臺並重新啟動它。如果不提供作業編號,則使用最後一個轉換為後臺任務的程序。
  • commandline&:在命令列的末尾新增一個與號&作為正在執行的後臺任務執行該命令。
  • kill%job\u number:向程序傳送SIGTERM訊號15以終止它。
  • kill 9%job\u number:向程序傳送SIGKILL,訊號9,並突然終止它。

相關:如何從Linux終端終止程序

  • 發表於 2021-04-03 03:30
  • 閱讀 ( 49 )
  • 分類:網際網路

你可能感興趣的文章

如何控制linux啟動服務和守護程序

...許多應用程式,您甚至可能不知道這些應用程式。下面是如何控制它們。 ...

  • 發佈於 2021-03-15 11:22
  • 閲讀 ( 50 )

linux命令參考備忘單

...便的Linux命令備忘單。如果您想執行其中的幾個,請檢視如何在帶螢幕的Linux終端上執行多工。 ...

  • 發佈於 2021-03-22 04:06
  • 閲讀 ( 56 )

linux中的程序是什麼?

... 流程如何開始 ...

  • 發佈於 2021-03-27 02:21
  • 閲讀 ( 59 )

如何使用crontab自動化linux中的重複任務

... 在這裡,您將瞭解什麼是crontab,如何新增自動化作業,以及一些實際示例。 ...

  • 發佈於 2021-03-28 04:45
  • 閲讀 ( 53 )

如何在linux上殺死殭屍程序

...好的程式會讓殭屍程序潛伏在Linux計算機中。瞭解殭屍是如何產生的,以及如何讓它們最終安息。 程序狀態如何在linux上工作 當然,Linux必須跟蹤計算機上執行的所有應用程式和守護程序。其中一種方法是維護程序表。這是核...

  • 發佈於 2021-04-01 07:47
  • 閲讀 ( 56 )

如何使用linux的screen命令

...視窗推到後臺(稱為“分離”)。當你想看到你的程序是如何進行的,你可以把視窗拉到前臺(“重新連線”)並再次使用它。這對於您不希望透過關閉終端視窗意外終止的長程序來說非常有用。 一旦運行了螢幕會話,就可以...

  • 發佈於 2021-04-02 11:06
  • 閲讀 ( 49 )

如何從linux終端終止程序

殺死一個程序有時是擺脫它的唯一方法。儘管名字很刺耳,“殺死”一個程序只是意味著“強迫它退出”。 什麼是過程(a process)? 執行諸如web瀏覽器之類的程式、與桌面環境相關聯的後臺程序以及Linux系統服務都是程序。 您可...

  • 發佈於 2021-04-03 14:39
  • 閲讀 ( 50 )

什麼是punkbuster,我可以解除安裝它嗎?

...工具。不管你在單人遊戲中作弊。 PunkBuster不僅僅檢視PC上執行的程序,它還可以檢查您是否修改了遊戲檔案。它的設計是為了打擊那些作弊的“朋克”。畢竟,在網路遊戲中被作弊的人踩著是不好玩的。 punkbuster什麼時候啟用?...

  • 發佈於 2021-04-05 06:08
  • 閲讀 ( 49 )

什麼是dasd?為什麼它在我的mac上執行?

...程序。 所以Duet活動排程器可以幫助管理後臺活動,但是如何管理呢?一篇關於Eclectic Light Company的帖子解釋了macOS如何執行後臺應用程式。下面是is所說的: Duet Activity Scheduler (DAS) maintains a scored list of background activities which usually c...

  • 發佈於 2021-04-05 06:21
  • 閲讀 ( 38 )

什麼是加密劫持,你如何保護自己?

...掘指令碼。它的挖掘速度會慢一些,但網站可以做到。 如何保護自己免受瀏覽器中的加密竊取 我們建議執行安全軟體,自動阻止加密貨幣礦工在您的瀏覽器。例如,Malwarebytes會自動阻止CoinHive和其他加密貨幣挖掘指令碼,從而...

  • 發佈於 2021-04-05 06:23
  • 閲讀 ( 54 )
c9449379994
c9449379994

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦