首頁 > 軟體

Linux進程管理

2020-06-16 17:21:11

程式(process): 儲存在硬碟、光碟等媒介中的可執行程式碼和資料;是靜態儲存的程式碼
進程(thread) :在cpu及記憶體中執行的動態執行的程式程式碼
進程是程式執行的範例
同一個進程可能對應多個進程(如:同時開幾個QQ)
執行緒: 有時被稱為輕量級進程,是程式執行流的最小單位 (在進程中再劃分實體)

每個執行中的程式就是一個進程,當一個程式執行時,內部可能包含了多個順序執行流,每個順序執行流就是一個執行緒

進程和執行緒的區別
它們是不同的作業系統資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響(如關掉一個QQ,其它並不會受影響); 而執行緒只是一個進程中的不同執行路徑,執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個進程死掉。所以多進程的程式要比多執行緒的程式健壯,但在進程切換時,耗費資源較大,效率要差一些。對於一些要求同時進行並且又要共用某些變數的並行操作,只能用執行緒,不能用進程
1)地址空間和其它資源(如開啟檔案):進程間相互獨立,同一進程的各執行緒間共用。
某進程內的執行緒在其它進程不可見
2)通訊:進程間通訊:共用記憶體、信號等;執行緒間可以直接讀寫進程資料段(如全域性變數)
來進行通訊——需要進程同步和互斥手段的輔助,以保證資料的一致性
3)排程和切換:執行緒上下文切換比進程上下文切換要塊得多
4)在多執行緒OS中,進程不是一個可執行的實體

子進程和父進程
INIT進程是系統中第一個進程,PID永遠為1
#命令& 放在後台執行

PID 進程號
PPID 父進程號碼
:#ps aux | grep 2653
:#ps aux | grep 1778
:#bash
:#bash
:#pstree | grep bash
:#exit
:#exit

#ps 檢視靜態的進程統計資訊
a all
u user
x
ax
aux
-e all
-l long (可看到父進程)
-f full
-el

VSZ:virtual memory size
RSS: resident set size

進程的五種狀態 #man ps /state
R:run 可執行,隨時會存取cpu
S:可中斷睡眠,進程在某事發生前無事可做,需要的時候才被喚醒
D:不可中斷睡眠,兩個進程同時存取同一資源 等待輸入輸出
T:停止的進程,被掛起的進程
Z:zombie 殭屍進程,不佔用任何資源 (一兩個不用管,多的話殺死其父進程)

#top 檢視動態的進程排名資訊

互動模式
P:按%cpu排序
M:按%MEM排序
u :user
k : kiil
空格:馬上重新整理
-p [PID] 監控某進程號
-u [使用者名稱]/[UID]
-b
:#top -b -n 2 > abc

Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: total, used, free, buffers 打算寫入磁碟沒有寫入磁碟的快取區
Swap: total, used, free, cached 馬上進入cpu要寫入磁碟的快取

load average資料是每隔5秒鐘檢查一次活躍的進程數,然後按特定演算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
us :user, 使用者空間佔用CPU的百分比。
sy :核心空間佔用CPU的百分比。
ni :nice, 改變過優先順序的進程佔用CPU的百分比
id :idle , 空閒CPU百分比
wa :waiting , 等待輸入輸出占用CPU的百分比
hi :Hardware Interrupts, 硬體中斷佔用CPU的百分比
si :Software Interrupts, 軟體中斷佔用CPU的百分比
st :stolen 偷取的CPU的百分比(如虛擬化)
在這裡CPU的使用比率和Windows概念不同

優先順序和優先順序
Linux核心的基本任務是排程進程,每個進程受兩個引數影響其排程
優先順序(priority):核心控制動態變化
值越小越早被cpu執行
使用者無法直接調整值的大小
優先順序(niceness):固定值,可手工修改
與priority有關,優先順序有正負之分(-20—19)
pr(新)= pr(老)+ nice
root 可以設定nice範圍(-20—19)
普通使用者可以設定nice範圍(0—19)

進程控制
#nice 設定新的優先順序(新開啟的進程)
以新的優先順序來啟動命令
#nice -n [命令] & 設定nice值為n
#nice --n [命令] & 設定nice值為-n
:#nice -10 cat /dev/zero > /dev/null &

#renice 設定新的優先順序(已經存在的進程)
#renice n [命令] 設定nice值為n
#renice -n [命令] & 設定nice值為-n

top命令也可修改進程的優先順序: r —> pid —> 優先順序

#pgrep = ps | grep

#pstree 以樹型結構顯示各進程間的關係
-p 列出進程的PID號

作業控制
手工啟動
前台啟動:使用者輸入命令,直接執行程式
後台啟動:在命令列尾加入“&”符號
#cp /dev/cdrom mycd.iso & 製作映象
[1]      24833
  /               
後台作業號 PID號
#jobs 檢視作業
-l list ID
+:最新放到後台的進程
- :僅次於最新放到後台的進程

#fg Move job to the  foreground
將處於後台的進程恢復到前台進行,需指定作業
不指定作業號,將恢復有“+”標記的進程
#fg [n]
#bg Move jobs to the  background
將後台停止的進程,在後台重新執行
#bg [n]

Ctrl + Z : 將當前進程掛起,即調入後台並停止執行

信號作為進程間通訊的一種方式
傳送信號的原因:硬體異常、軟體狀態、終端中斷
進程收到信號後採取的行動:終止、忽略信號、掛起

使用者常用的信號

                  1                                SIGHUG

SIGHUA:初衷是為了在終端結束通話時告訴終端控制進程這個事件,在守護行程中,通常用來重讀組態檔
比如重寫了 apache 組態檔,想不重起 apache 就讓設定生效,可以往 apache 進程發一個 HUP 信號

#kill
-l 列出Linux系統支援的信號種類
#kill -信號程式碼 PID // kill 命令用來傳送信號
取消後台作業
#kill -9 PID
#kill -9 %作業號

#killall 用於終止指定名稱的所有進程;而#kill 用於終止指定PID號的進程

#pkill 根據特定條件終止相應的進程 (fuser -k 殺不死的進程用pkill )
-u user
-t tty
:#pkiil -9 -t user

系統監控命令

#free 顯示系統的實體記憶體和交換空間的使用情況
-b -k -m -g
total used free shared buffers cached
Mem:
-/+ buffers/cache:
"-/+ buffers/cache" + "buffers" + "cached" = used
即 記憶體使用 = 快取程式碼 + 進程本身載入的程式碼
Cache:快取記憶體,是位於CPU與主記憶體間的一種容量較小但速度很高的記憶體。由於CPU的速度遠高於主記憶體,CPU直接從記憶體中存取資料要等待一定時間週期,Cache中儲存著CPU剛用過或迴圈使用的一部分資料,當CPU再次使用該部分資料時可從Cache中直接呼叫,這樣就減少了CPU的等待時間,提高了系統的效率。
Buffer:緩衝區,一個用於儲存 速度不同步的裝置 或  優先順序不同的裝置 之間傳輸資料的區域。通過緩衝區,可以使進程之間的相互等待變少,從而使從速度慢的裝置讀入資料時,速度快的裝置的操作進程不發生間斷。

監控硬體的幾個命令 ls /usr/bin/*stat
#vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st

#mpstat precess status
15時34分51秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle

#iostat 檢視系統磁碟I/O統計資訊
avg-cpu: %user %nice %system %iowait %steal %idle
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

#ls補齊
#lscpu #lsblk #lsb_release #lspci #lsusb

#uptime 執行時間,登入使用者數,cpu平均負載

檢視基本硬體資訊
cpu資訊:/proc/cpuinfo
記憶體資訊:/proc/meminfo
IDE裝置資訊:/proc/ide
SCSI裝置資訊:/proc/scsi

#dmidecode 將DMI資料庫中的資訊解碼,以可讀的文字方式顯示
DMI(Desktop Management Interface) 幫助收集電腦系統資訊的管理系統

#ls /var/run/

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140775.htm


IT145.com E-mail:sddin#qq.com