linux中第一个进程的形成,Linux进程管理
1.進程基本概述
定義:進程是已經啟動的可執行程序的運行中實例。
/proc目錄下以數字為名的目錄,每一個目錄代表一個進程,保留著進程的屬性信息,每一個進程的PID是唯一的,就算進程退出了,其他進程也不會占用其PID
1.1 進程的組成部分
已分配內存的地址空間
安全屬性,包括所有權憑據和特權
程序代碼的一個或多個執行線程
進程狀態
1.2 進程的環境
本地和全局變量
當前調度上下文
分配的系統資源,如文件描述符合網絡端口
1.3 進程的產生
現有的(父)進程復制自己的地址空間(fork)來創建一個新的(子)進程結構。
每個新進程分配有一個唯一的進程ID(PID),滿足跟蹤和安全性之需。PID與父進程ID(PPID)是新進程環境的元素。
任何進程可創建子進程。所有進程都是第一個系統進程的后代。REHEL7上,第一個系統進程就是systemd。
通過fork例程,子進程繼承安全性身份、過去和當前的文件描述符、端口和資源特權、環境變量以及程序代碼。隨后,子進程可能exec其自己的程序代碼。通常,父進程在子進程運行期間處于睡眠狀態,設置一個在子進程完成時發出信號的請求(wait)。在退出時,子進程可能以及關閉或丟棄了其資源和環境,剩余的部分被稱作僵停。父進程在子進程退出時收到信號而被喚醒,清理剩余結構,然后繼續執行其自己的程序代碼。
1.4 進程的分類
前臺進程:與終端相關的進程,通過終端啟動的進程
注意:也可把在前臺啟動的進程送往后臺,以守護模式運行
守護進程:daemon ,與終端無關的進程(如內核),在系統引導過程中啟動的進程
2.進程的狀態
Excuting //運行態
ready //就緒態,也可稱作睡眠態
Uninterrutible sleep //不可中斷的睡眠。不可隨時會喚醒,只有當IO資源加載成功后才能喚醒
Interruptible sleep // 可中斷的睡眠??呻S時喚醒
Zombie //僵尸進程。正常運行結束了,但是不釋放占據的內存資源
Stopped //停止態,暫停于內存中,但不會被調度,除非手動啟動
進程睡眠的原因
當一個執行中的進程,需要加載額外的IO資源的時候,由于IO設備的速度太慢,所以會轉入睡眠狀態等待,交出CPU給其他進程,以免浪費剩余執行時間。
在多任務處理操作系統中,每個CPU(或CPU核心)在一個時間點處理一個進程。在進程運行時,它對CPU的時間和資源分配的直接要求會有變化。進程分配有一個狀態,它隨著環境要求而改變。
Linux進程狀態
標志 內核定義的狀態和描述
R TASK_RUNNING: 進程正在CPU上執行,或者正在等待運行。處于運行中(或可運行)狀態時,進程可能正在執行用戶例程或內核例程(系統調用),或已排隊并就緒
S TASK_INTERRUPTIBLE :進程處于睡眠狀態且正在等待某一條件:硬件請求、系統資源訪問或信號。當事件或信號滿足該條件時,該進程將返回運行中。
D TASK_UNINTERRUPTIBLE:此進程也在睡眠,但與S狀態不同,不會響應傳遞的信號。僅在特定的條件下使用,其中進程可能會導致意外的設備狀態
K TASK_KILLABLE :進程處于睡眠狀態,與不可中斷的D狀態相同,但有所修改。允許等待中的任務通過響應信號而被中斷(徹底退出)。實用程序通??芍袛嗟倪M程狀態顯示為D狀態
T TASK_STOPPED:進程已被停止(暫停),通常是通過用戶或其他進程發出的信號。進程可以通過另一信號返回運行中狀態,繼續執行(恢復)
Z EXIT_ZOMBIE :子進程在退出時向父進程發出信號。除進程身份(PID)之外的所有資源都已釋放。
X EXIT_DEAD :當父進程清理(獲取)剩余的子進程結構時,進程現在已徹底釋放。此狀態從不會在進程列出實用程序中看到
< 高優先級進程
N 低優先級進程
前臺進程組中的進程
| 多線路進程
s 會話進程首進程
3.進程優先級
3.1Linux進程調度與多任務
現代計算機每臺配備數百個CPU,每個CPU上具有多個核心,它們可以并執行數以百計的指令。但是所有這些系統往往具有一個共同點:它們需要運行的進程數量總是超出實際具有的核心數。
通過時間分片技術、Linux(和其他操作系統)實際能夠運行的進程數(和線程數)可以超出可用的實際處理單元數。操作系統進程調度程序將在單個核心上的進程之間快速切換,從而給用戶一種有多個進程的同時運行的印象。
執行此切換的Linux內核部分稱為進程調度程序。
3.2 進程優先級
進程優先級范圍:0-139,數字越小,優先級越高
0-99 實時優先級,內核調整
100-139 靜態優先級,用戶可控制
進程優先級的特點
獲得更多的CPU運行時間
更優先獲得CPU運行的機會
要修改進程的優先級可以通過調整進程的nice值來實現,nice值越小,優先級越高
nice值的范圍是(-20,19),-20對應100 ,19對應139
3.3 相對優先級
由于不是每個進程都與其他進程同樣重要,可告知調度程序為不同的進程使用不同的調度策略。常規系統上運行的大多數進程使用的調度策略稱為SCHED_OTHER(也稱為SCHED_NORMAL),但還有一些其他策略可用于不同的目的。
由于并非所有進程都以同樣的方式創建,可為采用SCHED_NORMAL策略運行的進程指定相對優先級。此優先級稱為進程的nice值。一個進程可以有40種不同級別的nice值。
這些nice級別的范圍是從-20到19.默認情況下,進程將繼承其父進程的nice級別,通常為0
nice級別越高,表示優先級越低(該進程容易將其CPU使用量讓其他進程)
nice級別越低,表示優先級越高(該進程更加不傾向于讓出CPU)
如果不存在資源爭用(例如當活動進程數小于可用CPU核心數時),即使nice級別高的進程也將仍使用它們可使用的所有可用CPU資源。當請求CPU時間的進程數超過可用核心數時,nice級別較高的進程將比nice級別較低的進程收到更少的CPU時間。
3.4 nice級別與權限
為很少占CPU資源的進程設置較低的nice級別可能會對同一系統上運行的其他進程的性能造成負面影響,所以緊允許root用戶設置負nice級別以及降低現有進程的nice級別
普通非特權用戶僅允許是指正的nice級別,只能對現有進行級別提升nice級別,而不能降低nice級別。
3.5 進程優先級調整
調整nice值
```
//調整以及啟動的進程的nice值
renice NI PID (例:renice 3 3704)
//在啟動時指定nice值(-20,19)
nice -n NI (COMMAND)
```
4.進程管理命令
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
4.1 ps(process state)命令用于列出當前的進程,可以顯示詳細的進程信息,包括:
用戶標識符(UID),它確定進程的特權
唯一進程識別符(PID)
CPU和已經花費的時間
進程在各種位置上分配的內存數量
進程的位置STDOUT,稱為控制終端
當前的進程狀態
ps支持是三種選項格式:
UNIX(POSIX)選項、可以分組但必須以連字符開頭
BSD選項,可以分組但不可與連字符同用
GNU長選項,以雙連字符開頭
ps(process state),顯示進程信息,注意事項:
加了[ ]中括號的,表示內核進程,通常位于頂部
exiting或defunct表示僵尸進程
總結
以上是生活随笔為你收集整理的linux中第一个进程的形成,Linux进程管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux将txt文件复制为bak,Li
- 下一篇: linux文件权限umask,linux