PHP資料結構(三)——運用棧實現括號匹配
阿新 • • 發佈:2022-05-03
day31程序管理
程序概述
什麼是程序?
程序就是一個正在執行的程式
程式與程序的區別
程序是動態概念,具有生命週期無法長期存放在系統中
程式是靜態概念,程式碼的集合,可以長期存放在系統中
程序的生命週期
接收任務-fork子程序 -子程序處理任務- 父程序等待
正常結束任務
非正常結束任務
- 產生殭屍程序
- 產生孤兒程序
什麼是殭屍程序
子程序先結束,父程序沒有及時回收子程序的佔用資源
什麼是孤兒程序
父程序先結束,子程序沒有父程序的管理
1.使用者發起請求 2.父程序會fork出子程序,子程序會繼承父程序大部分的屬性,如:檔案描述符等,處理任務 3.子程序在處理任務的過程中,父程序是一個wait狀態,等待子程序 4.正常結束 5.非正常結束 - 殭屍程序 - 孤兒程序
殭屍程序及產生的原因
殭屍程序
子程序比父程序先結束
父程序沒有回收子程序的資源
此時的子程序就稱為”殭屍程序”
產生原因
子程序的結束和父程序的執行是非同步的
父程序永遠不知道子程序什麼時候結束
子程序在結束時,父程序繁忙來不及wait子程序
則會導致,子程序變成殭屍程序
孤兒程序及產生的原因
孤兒程序
父程序比子程序先結束
子程序還在執行任務,沒有父程序管理
此時的子程序就稱為”孤兒程序”
產生原因
子程序的結束和父程序的執行是非同步的
父程序永遠不知道子程序什麼時候結束
當父程序正常完成工作或其他原因被終止
則會導致,子程序變成孤兒程序
監控程序的狀態
程序狀態管理命令 -ps
# 語法 ps [選項] [引數] # 常用選項組合 [root@web01 nginx]# ps -ef [root@web01 nginx]# ps aux a:檢視所有與終端相關的程序,由終端發起的程序 u:顯示程序的管理使用者 x:檢視所有與終端無關的程序 [root@localhost ~]# ps aux|grep nginx USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 7173 0.0 0.0 112812 980 pts/0 R+ 14:34 0:00 grep --color=auto nginx USER:該程序的管理使用者 PID:程序號 %CPU:該程序佔用CPU的百分比 %MEM:該程序佔用記憶體的百分比 VSZ:該程序佔用虛擬記憶體的大小 RSS:該程序佔用實體記憶體的大小 TTY: ?:由核心發起的程序 tty:機器上的終端程序 pts/N:遠端連線工具的終端程序 STAT:程序執行的狀態 D:無法中斷的休眠狀態(通IO的程序)***** R:正在執行的狀態 ***** S:處於休眠狀態的程序 ***** +:在前臺執行 ***** Z:殭屍程序 ***** T:暫停或者被追蹤的狀態 W:進入交換記憶體的程序(swap,centos7見不到) X:死掉的程序(少見) <:優先順序高的程序 N:優先順序低的程序 L:有些資料頁被鎖進記憶體的程序 s:父程序,在它下面有子程序 l:以執行緒的方式執行 |:存在多程序的程序 START:程序開啟的時間 TIME:該程序佔用CPU的時間 COMMAND:程序的名字或者程序的命令 []:核心態程序 沒[]:使用者態程序 # 如果後臺有被暫停的程序 # 檢視所有被暫停的程序 [root@localhost ~]# jobs [1]+ Stopped ping www.baidu.com bg:讓暫停的程序執行起來,後面加數字,就可以執行第幾個被暫停的程序(預設是最後一個) fg:是把後臺暫停的程序,調到前臺執行,後面加數字,可以將第N個程序調到前臺執行(預設是最後一個) # ps命令的用法 # 1.根據%CPU進行排序 [root@localhost ~]# ps aux|sort -k 3 [root@localhost ~]# ps aux --sort %cpu [root@localhost ~]# ps aux --sort %mem # o:自定義顯示欄位 [root@localhost ~]# ps axo pid,%cpu,command,user # 3.顯示子程序 f:檢視子程序和父程序的關係 [root@localhost ~]# ps auxf|grep nginx # 4.檢視指定程序的pid [root@localhost ~]# ps aux|grep [n]ginx [root@localhost ~]# pgrep ping 7197 -l:顯示該程序的啟動命令 -a:顯示該程序的完整描述資訊 [root@localhost ~]# pidof ping 7197
程序管理命令-top
[root@localhost ~]# top # 第一行:系統相關 top - 17:12:47 up 37 min, 1 user, load average: 0.00, 0.01, 0.05 # top:命令 # 17:12:47:系統當前時間 # up 37 min:該伺服器執行的時間 # 1 user:當前登入使用者數量 # load average: 0.00, 0.01, 0.05:系統平均負載 # 0.01:1分鐘 # 0.02:5分鐘 # 0.05:15分鐘 # 第二行:程序狀態 Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie # 91 total:當前系統中所有的程序數量 # 1 running:處於R狀態,正在執行狀態的程序數 # 90 sleeping:處於S狀態,sleep狀態的程序數 # 0 stopped:處於T狀態,後臺掛起暫停狀態的程序數 # 0 zombie:處於Z狀態,殭屍程序的程序數量 # 第三行:CPU百分比 %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st # us:使用者程序佔用cpu的百分比(使用者態) # sy:系統程序佔用cpu的百分比(核心態) # id:cpu的空閒程度 # ni:優先順序較高的程序佔用cpu的百分比 # wa:等待狀態的程序佔用cpu的百分S # hi:硬中斷佔用cpu的百分比 # si:軟中斷佔用cpu的百分比 # st:虛擬化技術佔用cpu的百分比 # 第四行:實體記憶體 KiB Mem : 995896 total, 724972 free, 129240 used, 141684 buff/cache # 995896 total:總記憶體數 # 724972 free:空閒記憶體數 # 129240 used:已使用的記憶體數 # 141684 buff/cache:buffer緩衝區/快取區 # 第五行:Swap虛擬記憶體 KiB Swap: 1048572 total, 1048572 free, 0 used. 703136 avail Mem # 1048572 total:總共的虛擬記憶體數 # 1048572 free:空閒的虛擬記憶體數 # 0 used:已使用的虛擬記憶體數 # 703136 avail Mem:可用的虛擬記憶體數
什麼是中斷
中斷是系統用來影響硬體裝置請求的一種機制,它會打斷程序的正常排程和執行,然後呼叫核心中的中斷處理程式來影響設 備的請求。
top命令的使用方法
# top
-d:指定更新的時間(預設是3s更新一次)
-p:只檢視指定pid的程序
-u:指定相關使用者
-b:將top內容儲存到檔案中
-n:指定次數
top 常見指令
h 檢視幫出
z 高亮顯示
1 顯示所有CPU的負載
s 設定重新整理時間
b 高亮現實處於R狀態的程序
M 按記憶體使用百分比排序輸出
P 按CPU使用百分比排序輸出
R 對排序進行反轉
f 自定義顯示欄位
k kill掉指定PID程序
W 儲存top環境設定 ~/.toprc
q 退出
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:程序ID號
USER:該程序的使用者
PR NI:程序優先順序
VIRT:虛擬記憶體佔用空間
RES:實體記憶體佔用空間
SHR:共享記憶體佔用空間
S:程序的狀態
%CPU:佔用CPU的百分比
%MEM:記憶體佔用的百分比
TIME+:執行時間
COMMAND:程序的執行命令
程序的訊號管理
[root@localhost ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
常見訊號列表:
數字訊號 訊號別名 作用
1 HUP 掛起訊號,往往可以讓程序重新配置(重新載入配置檔案)
2 INT 中斷訊號,起到結束程序的作用,和ctrl + c 的作用一樣
3 QUIT 讓程序退出,結果是程序退出
9 KILL 直接結束程序,不能被程序捕獲
15 TERM 程序終止,這是預設訊號
18 CONT 被暫停的程序將繼續恢復執行(放在後臺執行,bg)
19 STOP 暫停程序
20 TSTP 使用者停止請求,作用類似於ctrl + z 把程序放到後臺並暫停
killall:殺掉所有程序,不用指定pid
pkill:殺掉所有程序,不用指定pid
[root@web01 ~]# pkill -t pts/0
[root@web01 ~]# w
[root@web01 ~]# pkill -9 -t pts/0