Linux 系統管理-常見名詞介紹

前言

在開始使用系統管理相關的指令前,需要先搞懂常用的名詞,以及各名詞間的關係,才知道要解決問題時要往哪個方向進行,本文會先介紹一些在系統上常用的名詞

系統常見名詞

Application(應用程式) = Service(服務)

  • 應用程式(Application)是一個軟體程序,通常用戶可以運行它來執行特定的任務或功能。
  • 服務(Service)是在背景運行的一種應用程式,通常無需用戶交互。服務可以在系統啟動時自動運行,並在後台執行特定的任務或提供功能。

Process(進程)

  • 進程是正在運行的某個程序的實例。每個進程都有自己的記憶體空間和資源,並且可以獨立運行。每個進程都有自己的編號(PID)。運行一個命令,會開啟一個進程,如:運行一個ls命令,他就會開啟一個進程
  • 進程可以同時運行多個任務,並且可以在操作系統的進程管理下進行調度。

Threads(執行緒)

  • 執行緒是在單個進程內運行的單位。一個進程可以包含多個執行緒,這些執行緒共享相同的記憶體空間,但具有自己的執行上下文。
  • 執行緒可以實現多任務並行執行,但需要注意處理共享資源的同步和互斥問題。

Job(作業)

  • 指的是終端上運行的一個或多個進程,如:使用了ssh終端連線到linux,並在終端上執行了sleep 500命令,sleep 500就是該終端上的一個作業,可以使用jobs查看當前終端所有的作業有哪些

  • 終端 ⇒ 作業(多個or 一個命令,每個命令都有自己的作業號)

  • 作業號(Job Number)不同於進程 ID(PID)。作業號是一個 在終端會話中分配給正在運行的作業的數字標識符,而不是唯一的進程 ID。 作業號通常從 1 開始遞增。每個作業可以包含一個或多個相關的進程。

  • 當在終端上啟動一個命令時,它會形成一個作業,該作業可以包含一個或多個相關的進程。例如,如果您在終端上運行一個後台進程,該作業可能包含一個進程。

  • 如果在終端上運行多個命令並將其中一個置於後台運行,每個命令都可以形成一個獨立的作業,每個作業都有其自己的作業號。

Session(會話)

會話(Session)是一個或多個進程組的集合。
一個會話只能有一個控制終端。這通常是登陸到其上的終端設備(在終端登陸情況下)或偽終端設備(在網絡登陸情況下)。

  • 建立與控制終端連接的會話首進程被稱為控制進程。其PID=SID

  • 一個會話中的幾個進程組可被分為

    • 一個前台進程組
    • 一個或多個後台進程組
    • shell 本身自己一個進程組
  • 所以一個會話中,應該包括

    • 控制進程(會話首進程)
    • 一個前台進程組
    • 任意數量後台進程組
  • 當用戶在控制終端輸入了特殊控制鍵(如:ctrl+c),內核就會發送信號給前台進程組中的所有進程

進程組

每個進程都屬於一個進程組,存在的目的是當信號發給一個進程組時,組內的進程都可以收到信號,方便管理

  • 進程組包含一個or多個進程。通常它們與同一作業相關聯,可以接收來自同一終端的各種信號。
  • 每個進程組有一個唯一的進程組ID。每個進程組都可以有一個組長進程。其進程組ID等於其組長進程ID。
  • 組長進程可以創建一個進程組,創建該組中的進程,然後終止。只要在某個進程組中一個進程存在,則該進程組就存在,這與其組長進程是否終止無關。

進程相關的名詞

後台運行 (Background)

指的是在不占用終端的情況下運行的進程

進程能夠在不阻塞終端下背景執行,用戶可以在終端繼續輸入指令

終端關閉後程序會停止運行

要讓指令在後台運行,可以在指令後面加上 & , 如 sleep 100 &

或者是一個原本在前台運行的進程,使用 ctrl+Z 將程式暫停執行(掛起),接著使用 bg 作業號

讓該程式改到後台運行

前台運行 (Foreground)

在終端上直接運行的進程,運行中會阻塞終端,用戶無法在終端繼續輸入指令

終端關閉後程序會停止運行

可以使用 fg %作業號 (不是PID)將原本後台執行的指令放到前台

掛起 (suspended)

暫時停止一個進程的執行 ctrl+Z ,只能用在前台運行的進程,如果要掛起後台的進程可以先把他叫到前台,或是使用kill 指令

常用在可能需要長時間處理的進程,先讓他暫緩執行,或者是操作到一半的工作,想要暫停一下去做其他動作

例如: 正在使用vi 編輯器編輯文件,突然想要做其他事,就可以用 ctrl+Z 將進程暫停,等需要時在使用 fg 指令將原本編輯到一半的vi 編輯器叫回來

守護進程(Daemon)

守護進程通常以字母d 結尾,如Systemd

大多是系統啟動就運行,直到系統關閉才終止

不依賴於終端,終端關閉後仍會繼續運行

殭屍進程 (Zombie Process)

  • 指已經完成執行的子進程,但其父進程仍然存活並且未能正確地回收子進程的資源,導致子進程處於”殭屍”狀態。這個子進程不再執行任何程式碼,但仍然存在在系統進程表中,佔據系統資源,並且通常會占用一個進程ID(PID)。

  • 當子進程完成其任務後,它會向其父進程發送一個退出信號,父進程應該使用相關的系統調用(例如wait()waitpid())來獲取子進程的退出狀態,並釋放子進程的資源。如果父進程沒有進行這些操作,子進程就會變成殭屍進程。

切換進程的指令

相關切換進程的指令可以參考另一篇文章

Linux 系統管理-進程相關操作

參考

bg和fg指令(整理)以及 Linux中Ctrl+C、Ctrl+D等按键操作&进程相关命令

搞懂进程组、会话、控制终端关系,才能明白守护进程如何创建

什么是守护进程?


Linux 系統管理-常見名詞介紹
https://austin72905.github.io/2023/09/03/linux-system-management-introduce/
作者
Austin Lin
發布於
2023年9月3日
許可協議