首頁 > 運維 > linux運維 > 主體

linux中進程什麼意思

青灯夜游
發布: 2021-11-30 16:19:14
原創
4564 人瀏覽過

進程是運行在Linux中的程式的一個實例,是管理事務的基本單元;進程擁有自己獨立的處理環境和系統資源。進程的狀態是變化的,其包括進程的創建、調度和消亡。

linux中進程什麼意思

本教學操作環境:linux5.9.8系統、Dell G3電腦。

進程是運行在 Linux 中的程式的一個實例。

在 Linux 系統中,作業系統是透過進程去完成一個一個的任務,而進程是管理事務的基本單元。進程擁有自己獨立的處理環境(如:目前需要用到哪些環境變量,程式運行的目錄在哪,目前是哪個用戶在執行此程式等)和系統資源(如:處理器CPU 佔用率、記憶體、I /O設備、資料、程式)。

當你在 Linux 系統中執行一個程式時,系統會為這個程式建立特定的環境。這個環境包含系統運作這個程式所需的任何東西。

每當你在 Linux 中執行一個命令,它都會創建,或啟動一個新的進程。例如,當你嘗試執行指令「ls -l」來列出目錄的內容時,你就啟動了一個進程。如果有兩個終端視窗顯示在螢幕上,那麼你可能運行了兩次同樣的終端程序,這時會有兩個終端進程。

每個終端機視窗可能都運行了一個 Shell,每個運行的 Shell 都分別是一個進程。當你從 Shell 呼叫一個命令時,對應的程式就會在一個新進程中執行,當這個程式的進程執行完成後,Shell 的進程就會恢復運行。

作業系統透過被稱為 PID 或進程 ID 的數位編碼來追蹤進程。系統中的每一個行程都有一個唯一的 PID。

現在我們透過一個實例來了解 Linux 中的進程。我們在Shell 命令列下執行以下命令:

$ sleep 10 &
[1] 3324
登入後複製

因為程式會等待10 秒,所以我們快速地在目前Shell 上尋找任何進程名為sleep 的進程:

$ ps -ef | grep sleep
mozhiyan  3324  5712  cons1  17:11:46  /usr/bin/sleep
登入後複製

我們看到進程名為/usr/bin/sleep 的進程正運行在系統中(其PID 與我們在上一命令中得到的PID 相同)。

現在,我們嘗試並行地從3 個不同的終端視窗執行上述的sleep 命令,上述命令的輸出將類似如下所示:

$ ps -ef | grep sleep
mozhiyan  896   5712  cons1  17:16:51  /usr/bin/sleep
mozhiyan  5924  5712  cons1  17:16:52  /usr/bin/sleep
mozhiyan  2424  5712  cons1  17:16:50  /usr/bin/sleep
登入後複製

我們看到sleep 程式的每一個實例都創建了一個單獨的進程。

每個 Linux 行程還有另一個 ID 號碼,也就是父行程的 ID(ppid)。系統中的每一個使用者進程都有一個父進程。

指令「ps -f」就會列出進程的 PID 和 PPID。此命令的輸出類似如下所示:

$ ps -f
   UID     PID   PPID    TTY       STIME      COMMAND
mozhiyan  4124   228    cons0    21:37:09   /usr/bin/ps
mozhiyan   228   1      cons0    21:32:23   /usr/bin/bash
登入後複製

你在 Shell 命令列提示字元下執行的命令都把目前 Shell 的進程當作父進程。例如,你在 Shell 命令列提示字元下輸入 ls 指令,Shell 將執行 ls 指令,此時 Linux 核心會複製 Shell 的記憶體頁,然後執行 ls 指令。

在 Unix 中,每一個進程是使用 fork 和 exec 方法建立的。然而,這種方法會導致系統資源的損耗。

在Linux 中,fork 方法是使用寫時拷貝記憶體頁實現的,所以它導致的僅是時間和複製父進程的記憶體頁表所需的記憶體的損失,並且會為子進程創建一個唯一的任務結構。

寫入時拷貝模式在建立新進程時避免了建立不必要的結構拷貝。例如,使用者在Shell 命令列提示符號下輸出ls 指令,Linux 核心將會建立一個Shell 的子程序,也就是Shell 的程序是父進程,而ls 指令的行程是子程序,ls 指令的程序會指向與此Shell 相同的記憶體頁,然後子程序使用寫入時拷貝技術執行ls 指令。

進程的狀態

每個 Linux 行程都有它自己的生命週期,例如,建立、執行、結束和清除。每個進程也都有各自的狀態,顯示進程中目前正發生什麼。進程的狀態是變化的,其包括進程的創建、調度和消亡。

程序可以有以下幾種狀態:

  • D(不可中斷休眠狀態)-程序正在休眠且無法恢復,直到一個事件發生為止。

  • R(運行狀態)-進程正在運行。

  • S(休眠狀態)-進程沒有在運行,而在等待一個事件或是訊號。

  • T(停止狀態)-程序被訊號停止,例如,訊號 SIGINT 或 SIGSTOP。

  • Z(僵死狀態)-標記為 的進程是僵死的進程,它們之所以殘留是因為它們的父進程適當地銷毀它們。如果父程序退出,這些程序將被 init 程序銷毀。

若要查看指定進程的狀態,可以使用如下指令:

ps -C processName -o pid=,cmd,stat
登入後複製

例如:

$ ps -C sleep -o pid=,cmd,stat
      CMD       STAT
9434 sleep 20    S
登入後複製

相關推薦:《Linux視頻教程

以上是linux中進程什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!