LInux進程管理
1.進程基本概念
1.進程基本概念
1.什麼是進程
進程(process):正在運行中的程序,用戶下達運行程序的命令後,就會產生進程。同一程序可產生多個進程(一對多關係),以允許同時有多位用戶運行同一程序,卻不會相沖突。
進程需要一些資源才能完成工作,如CPU使用時間、存儲器、文件以及I/O設備,且爲依序逐一進行,也就是每個CPU核心任何時間內僅能運行一項進程。
進程是使用資源的最小單位
process:運行中的程序的一個副本,是被載入內存的一個指令集合
進程ID(Process ID,PID)號碼被用來標記各個進程
UID、GID、和SELinux語境決定對文件系統的存取和訪問權限
通常從執行進程的用戶來繼承
存在生命週期
進程創建:
init:第一個進程
進程:都由其父進程創建,父子關係,CoW
fork(), clone()
2.進程,線程
進程是資源的集合,線程是運行程序的最小單位
3.進程優先級
進程優先級:
系統優先級:數字越小,優先級越高
0-139(CentOS4,5)
各有140個運行隊列和過期隊列
0-98,99(CentOS6)
實時優先級: 99-0 值最大優先級最高
nice值:-20到19,對應系統優先級100-139或99
4.進程間通信
IPC:Inter Process Communication
同一主機:signal:信號
shm:shared memory
semaphore:信號量,一種計數器
不同主機:socket:IP和端口號
RPC:remote procedure call
MQ:消息隊列,kafka,ActiveMQ
進程類型:
守護進程:daemon,在系統應道過程中啓動的進程,和終端無關
前臺進程:跟終端相關,通過終端啓動的進程
注意:可相互轉化
進程狀態:
運行態:running
就緒態:ready
睡眠態:可終端:interruptable
不可中斷:uninterruptable
停止態:stopped,暫停於內存,但不會被調度嗎,除非手動啓動
僵死態:zombie,結束進程,父進程結束前,子進程不關閉
內存泄漏:out of mem簡稱oom導致原因內存不釋放,程序寫的有問題
內存溢出:overflow,使用的內存超出了申請的內存
2.系統管理工具
進程分類:
CPU-Bound:cpu密集型,非交互
IO-Bound:IO密集型,交換
Linux系統狀態的查看及管理工具:pstree,ps,pidof,pgrep,top,htop,glance
pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
pstree命令:pstree display a tree of processes
ps: process state
ps report a snapshot of the current processes
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
2命令
ps:查看進程
選項:
默認顯示當前終端中的進程
a 選項包括所有終端中的進程
x 選項包括不鏈接終端的進程
u 選項顯示進程所有者的信息
f 選項顯示進程樹,相當於--forest
kl --sore 屬性 對屬性排序,屬性前加-表示倒序
o 屬性...選項顯示定製的信息pid,cmd,%cpu,%mem,psr
l 顯示支持的屬性列表
-C cmdlist 指定命令,多個命令用,分隔
常用 ps aux 查看所有終端的用戶進程信息包括不鏈接終端的設備
ps axo pid,%cpu,%mem,cmd k -%cpu 查看定製信息 按cup使用率排序
ps -C passwd 只看某個指定命令的進程
ps -C f2.sh 也可以指定腳本名稱查看
ps輸出屬性
VSZ: Virtual memory SiZe,虛擬內存集,線性內存
RSS: ReSident Size, 常駐內存集
STAT:進程狀態
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前臺進程
l: 多線程進程
L:內存分頁並帶鎖
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者
-C cmdlist 指定命令,多個命令用,分隔
-L 顯示線程-e: 顯示所有進程,相當於-A
-f: 顯示完整格式程序信息
-F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
-u userlist 指定有效的用戶ID或名稱
-U userlist 指定真正的用戶ID或名稱
-g gid或groupname 指定有效的gid或組名稱
-G gid或groupname 指定真正的gid或組名稱
-p pid 顯示指pid的進程
--ppid pid 顯示屬於pid的子進程
-M 顯示SELinux信息,相當Z
ps
ni: nice值
pri: priority 優先級
psr: processor CPU編號
rtprio: 實時優先級
示例:ps axo pid,cmd,psr,ni,pri,rtprio
常用組合:
aux
-ef
-eFH
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,commaxo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,co
pgrep
-u 生效用戶
-U 真正發起用戶
-a 顯示完整格式的進程名
-l 顯示進程名
-t terminal:與指定終端相關的進程
-P pid:顯示指定進程的子進程
uptime
顯示當前時間,系統已啓動的時間、當前上線人數,系統平均負載(1、5、10
分鐘的平均負載,一般不會超過1)