對於沒有電腦科學背景的人來說,過程這個詞通常是陌生的。然而,在討論Linux程式設計時經常使用它,程序對於系統管理工作是必不可少的。
Linux也使用job這個術語來指代一個非常相似的概念。兩者之間的區別很細微,但很重要,作業控制是執行多工環境時的有用工具。您可以使用許多工具和內建命令來處理作業。
在最簡單的層次上,您可以將一個程序看作是您執行的程式的等價物。它可能是一個成熟的GUI應用程式,比如web瀏覽器。它可以是在命令列上執行的單個一次性命令,例如ls。廣義地說,在你的計算機上發生的任何事情都取決於一個程序,在它的核心。
實際上,單個應用程式可以利用多個程序同時執行不同的任務。使用管道的命令列呼叫,例如:
$ grep "error" log.txt | wc -l將執行兩個單獨的程序,每個管段一個。
程序可以由使用者顯式建立,也可以由計算機本身自動建立。事實上,一旦啟動,可能已經有數百個程序在執行。
程序可以派生其他程序,而init是在許多傳統Linux系統上啟動的第一個程序,它最終負責啟動所有執行的程序。
許多程序都是執行任務然後停止的短暫命令。在終端中鍵入ls將在幾秒鐘內啟動、執行和停止程序。
某些程序(如守護程序)連續執行。例如,cron程序在其主機執行時定期執行其他命令。
作業系統(OS)為每個程序分配一個唯一的識別符號。它被稱為PID或程序ID。這個值通常是一個1-5位數字,將來的程序可以重用已經完全清理的以前程序的PID。
作業系統本身以許多不同的方式使用PID。一個很好的例子是/proc目錄,它儲存有關當前正在執行的程序的資訊。
相關:Linux根目錄中的那些資料夾是什麼?
在Linux術語中,作業是由shell管理的程式。它通常由一個程序組成,但可能使用多個程序。在終端中輸入命令時,將生成一個程序來執行該命令,並建立一個作業來幫助在命令執行時控制該命令。
如果正在前臺執行作業,可以按Control+C(^C)來中斷它。通常,這將導致程序退出並將終端返回到提示。
$ sleep 100^C$或者,按Control+Z(^Z)將停止作業的執行,但不會導致作業結束。你可以把它想象成一個停頓。
$ sleep 100^Z[1]+ Stopped sleep 100$請注意,shell在停止作業時會在方括號中告訴您作業的編號。這可以與其他命令一起使用來控**業。例如,可以透過使用fg將作業帶到前臺來重新啟動作業:
$ fg %1sleep 100您可以使用類似的命令在後臺重新啟動作業:
$ bg %1[1]+ sleep 100 &$這將使控制元件返回到提示,以便您可以在作業執行時繼續執行其他工作。如果希望作業一啟動就在後臺執行,請在命令末尾新增一個(&T):
$ sleep 100 &[1] 61087$在本例中,shell列印括號中的作業編號,然後列印PID。
獲取程序資訊最有用的命令之一是top。該程式顯示執行程序的實時互動式檢視。它是與圖形程式(如GNOME的系統監視器或Windows工作管理員)等效的命令列。
您可以使用簡單的命令top:
標題區域顯示CPU負載和記憶體使用情況。下面,top顯示了一個表,每行包含一個程序。詳細資訊包括PID、程序正在使用的可用CPU功率以及它所消耗的CPU總時間。資訊會自動重新整理,預設情況下每三秒重新整理一次。
有許多選項和互動式命令可以用來改變top的行為。使用man-top命令閱讀更多:
ps命令是程序狀態的縮寫,列出程序。不同的選項允許對顯示的詳細資訊進行各種過濾和調整。預設情況下,ps顯示附加到終端並由當前使用者啟動的程序。換句話說,大多數命令都是您在命令列中鍵入的。
在前面的任務仍處於後臺的情況下,輸出可能看起來有點像這樣:
$ psPID TTY TIME CMD35564 ttys000 0:00.00 sleep 10073998 ttys000 0:00.43 -bash與top一樣,ps有許多控制其行為的選項,這些選項可以透過man ps發現:
最有用的兩個經常組合在一起的是-e和-f。它們分別顯示所有使用者擁有的程序和附加列。例如:
$ ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 2020 ? 00:11:22 /**in/initroot 2 0 0 2020 ? 00:00:00 [kthreadd]...jobs命令列出當前shell中的後臺作業。要演示其用法,請在後臺啟動一個長時間執行的作業:
$ du -skh ~ >/tmp/du.txt 2>/dev/null &[1] 61167此命令計算主目錄使用的總磁碟空間,將其輸出重定向到臨時檔案。
$ jobs[1]+ Running du -skh ~ > /tmp/du.txt 2> /dev/null &最終,當作業完成時,終端中將出現一行,類似於:
[1]+ Exit 1 du -skh ~ > /tmp/du.txt 2> /dev/null如果你發現了一個行為不端的過程,你可能需要終止它。儘管聽起來很激烈,kill命令是系統管理員工具箱中的一個正常部分。它可以傳送幾個訊號中的任意一個,這些訊號是控制流程行為的標準通知。要傳送的一些常見訊號是SIGINT、SIGTSTP、SIGTERM和SIGKILL。
SIGINT相當於按^C。SIGTSTP相當於按^Z。SIGTERM和SIGKILL都是停止程序的方法。前者向程序傳送一個請求,給它一個優雅地關閉自己的機會。後者是一種更極端的方法,用於強制流程退出,應作為最後手段。
kill命令也可以用於作業。例如:
$ jobs[1]+ Running sleep 100 &$ kill %1[1]+ Terminated: 15 sleep 100閱讀更多:殺死Linux中無響應程式的方法
流程和作業是很難把握的概念,尤其是它們之間的區別。然而,它們是理解Linux下系統管理的第一步。作業是同時從shell執行不同命令的一種實用方法。
程序是一個較低層次的概念,它也可以**縱,是計算機上執行的每個程式的核心。
...動程序。 這個啟動過程依次負責啟動系統中的所有其他程序。這包括伺服器應用程式(包括將出現漂亮桌面登入的X伺服器程序)、所謂的“守護程式”(在後臺等待特定事件的程式,如CUPS列印守護程式)和其他...
...可以使用成千上萬個可能的命令;第二,最終只能使用其中的一小部分。儘管提供了力量,我們大多數人只是重複同樣的命令一遍又一遍。 ...
...我們準備了這個方便的Linux命令備忘單。如果您想執行其中的幾個,請檢視如何在帶螢幕的Linux終端上執行多工。 ...
...工作就把它做好?您是否反對將多個任務合併到單個專案中的想法?如果是這樣的話,使用Devuan就是你對理想信念的一種表達。 ...
...?我們來看看。 系統D:快速回顧 在歷史上,Linux系統中的啟動序列是systemv Unix(SysV)引入的初始化系統的副本。SysV init系統遵循Unix原理。當人們提到Unix哲學時,他們通常會把它簡化為眾所周知的“做一件事,把它做好”這...
...守護程序。其中一種方法是維護程序表。這是核心記憶體中的結構列表。每個程序在此列表中都有一個條目,其中包含有關它的一些資訊。 每個程序表結構中都沒有太多內容。它們包含程序ID、一些其他資料項和指向該程序的程...
...和服務、日誌記錄和日誌記錄,以及許多其他已經由Linux中的專用模組處理的功能。其中大部分與系統初始化無關。 systemd提供的一些守護程式包括: systemd udevd:管理物理裝置。 systemd logind:管理使用者登入。 systemd resolved:為...