您好,登錄后才能下訂單哦!
本篇內容介紹了“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(僵死狀態)——標記為 <defunct> 的進程是僵死的進程,它們之所以殘留是因為它們的父進程適當地銷毀它們。如果父進程退出,這些進程將被 init 進程銷毀。
若要查看指定進程的狀態,可以使用如下命令:
ps -C processName -o pid=,cmd,stat
例如:
$ ps -C sleep -o pid=,cmd,stat CMD STAT 9434 sleep 20 S
“linux中的進程是什么意思”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。