linux中的程序是什麼?

理解程序和作業是掌握Linux的一個關鍵方面。這是你需要知道的。...

對於沒有電腦科學背景的人來說,過程這個詞通常是陌生的。然而,在討論Linux程式設計時經常使用它,程序對於系統管理工作是必不可少的。

A grid of yellow sticky notes with a hand removing the lower right note

Linux也使用job這個術語來指代一個非常相似的概念。兩者之間的區別很細微,但很重要,作業控制是執行多工環境時的有用工具。您可以使用許多工具和內建命令來處理作業。

什麼是過程(a process)?

在最簡單的層次上,您可以將一個程序看作是您執行的程式的等價物。它可能是一個成熟的GUI應用程式,比如web瀏覽器。它可以是在命令列上執行的單個一次性命令,例如ls。廣義地說,在你的計算機上發生的任何事情都取決於一個程序,在它的核心。

實際上,單個應用程式可以利用多個程序同時執行不同的任務。使用管道的命令列呼叫,例如:

$ grep "error" log.txt | wc -l

將執行兩個單獨的程序,每個管段一個。

流程如何開始

程序可以由使用者顯式建立,也可以由計算機本身自動建立。事實上,一旦啟動,可能已經有數百個程序在執行。

程序可以派生其他程序,而init是在許多傳統Linux系統上啟動的第一個程序,它最終負責啟動所有執行的程序。

流程如何結束

許多程序都是執行任務然後停止的短暫命令。在終端中鍵入ls將在幾秒鐘內啟動、執行和停止程序。

某些程序(如守護程序)連續執行。例如,cron程序在其主機執行時定期執行其他命令。

識別流程

作業系統(OS)為每個程序分配一個唯一的識別符號。它被稱為PID或程序ID。這個值通常是一個1-5位數字,將來的程序可以重用已經完全清理的以前程序的PID。

作業系統本身以許多不同的方式使用PID。一個很好的例子是/proc目錄,它儲存有關當前正在執行的程序的資訊。

相關:Linux根目錄中的那些資料夾是什麼?

什麼是工作(a job)?

在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:

A screenshot of a terminal showing the top command running on Linux

標題區域顯示CPU負載和記憶體使用情況。下面,top顯示了一個表,每行包含一個程序。詳細資訊包括PID、程序正在使用的可用CPU功率以及它所消耗的CPU總時間。資訊會自動重新整理,預設情況下每三秒重新整理一次。

有許多選項和互動式命令可以用來改變top的行為。使用man-top命令閱讀更多:

A screenshot of a terminal showing the manpage for the Linux top command

獲取活動程序的快照

ps命令是程序狀態的縮寫,列出程序。不同的選項允許對顯示的詳細資訊進行各種過濾和調整。預設情況下,ps顯示附加到終端並由當前使用者啟動的程序。換句話說,大多數命令都是您在命令列中鍵入的。

在前面的任務仍處於後臺的情況下,輸出可能看起來有點像這樣:

$ psPID TTY TIME CMD35564 ttys000 0:00.00 sleep 10073998 ttys000 0:00.43 -bash

與top一樣,ps有許多控制其行為的選項,這些選項可以透過man ps發現:

A screenshot of a terminal showing the manpage for the Linux ps command

最有用的兩個經常組合在一起的是-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中使用程序和作業

流程和作業是很難把握的概念,尤其是它們之間的區別。然而,它們是理解Linux下系統管理的第一步。作業是同時從shell執行不同命令的一種實用方法。

程序是一個較低層次的概念,它也可以**縱,是計算機上執行的每個程式的核心。

  • 發表於 2021-03-27 02:21
  • 閱讀 ( 60 )
  • 分類:電腦

你可能感興趣的文章

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

...動程序。 這個啟動過程依次負責啟動系統中的所有其他程序。這包括伺服器應用程式(包括將出現漂亮桌面登入的X伺服器程序)、所謂的“守護程式”(在後臺等待特定事件的程式,如CUPS列印守護程式)和其他...

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

40多個最常用的linux終端命令

...可以使用成千上萬個可能的命令;第二,最終只能使用其中的一小部分。儘管提供了力量,我們大多數人只是重複同樣的命令一遍又一遍。 ...

  • 發佈於 2021-03-15 21:40
  • 閲讀 ( 49 )

linux中殺死無響應程式的7種方法

...inux中遇到應用程式的問題,這裡有幾種方法可以殺死Linux中的程式。 ...

  • 發佈於 2021-03-18 00:56
  • 閲讀 ( 51 )

linux命令參考備忘單

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

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

沒有systemd的linux:為什麼要使用devuan,debian fork

...工作就把它做好?您是否反對將多個任務合併到單個專案中的想法?如果是這樣的話,使用Devuan就是你對理想信念的一種表達。 ...

  • 發佈於 2021-03-24 05:46
  • 閲讀 ( 40 )

如何更改linux密碼

...使用您的系統的實際使用者多得多。這些其他帳戶是系統程序,有時稱為“偽使用者” ...

  • 發佈於 2021-03-28 02:28
  • 閲讀 ( 42 )

在linux中,“bash”是什麼意思?

...ux作業系統在啟動過程中使用了許多Bash指令碼來啟動各種程序。 ...

  • 發佈於 2021-03-28 13:14
  • 閲讀 ( 61 )

沒有systemd的最佳linux發行版

...?我們來看看。 系統D:快速回顧 在歷史上,Linux系統中的啟動序列是systemv Unix(SysV)引入的初始化系統的副本。SysV init系統遵循Unix原理。當人們提到Unix哲學時,他們通常會把它簡化為眾所周知的“做一件事,把它做好”這...

  • 發佈於 2021-03-31 14:20
  • 閲讀 ( 40 )

如何在linux上殺死殭屍程序

...守護程序。其中一種方法是維護程序表。這是核心記憶體中的結構列表。每個程序在此列表中都有一個條目,其中包含有關它的一些資訊。 每個程序表結構中都沒有太多內容。它們包含程序ID、一些其他資料項和指向該程序的程...

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

為什麼linux的systemd在這麼多年後仍然存在分歧

...和服務、日誌記錄和日誌記錄,以及許多其他已經由Linux中的專用模組處理的功能。其中大部分與系統初始化無關。 systemd提供的一些守護程式包括: systemd udevd:管理物理裝置。 systemd logind:管理使用者登入。 systemd resolved:為...

  • 發佈於 2021-04-02 02:56
  • 閲讀 ( 44 )
echospicy
echospicy

0 篇文章

作家榜

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

相關推薦