程序基本概述
什麼是程序
比如:windows上安裝的QQ,我們會将其稱為QQ程式,那麼當QQ運作之後,在任務管理器中,我們可以看到QQ程式在運作着,此時,我們稱其為:QQ程序。
言簡意赅總結:當我們運作一個程式,那麼我們将該程式叫程序
注意:
1.當程式運作為程序後,系統會為該程序配置設定記憶體,以及運作的身份和權限。
2.在程序運作的過程中,伺服器上回有各種狀态來表示目前程序的名額資訊。
程序是已啟動的可執行程式的運作執行個體,程序有以下組成部分:
配置設定記憶體, 已配置設定記憶體的位址空間
安全屬性, 程序的運作身份和權限
程序代碼, 運作一個或多個的線程
程序狀态, 程序運作後的多種狀态
靜态程式, 二進制檔案, 靜态/bin/ls, /usr/sbin/sshd
動态程序, 程式運作的過程, 有生命周期及運作狀态
程序的運作環境,包括以下幾個部分:
局部和全局變量
目前的排程上下文
配置設定給程序使用的系統資源,例如檔案描述符、網絡端口等
給程序配置設定對應的pid,ppid
程式和程序的差別
1.程式是資料和指令的集合,是一個靜态的概念,比如/bin/ls、/bin/cp等二進制檔案,同僚程式可以長期存在系統中。
2.程序是一個程式的運作過程,是一個動态概念,程序是存在生命周期概念的,也就是說程序會随着程式的終止而銷毀,不會永遠在系統中存在。
程序的生命周期

程式運作時程序的狀态關系:
1.當父程序接收到任務排程時,會通過fork派生子程序來處理,那麼子程序會內建父程序的衣缽。
2.子程序在處理任務代碼時,父程序會進入等待的狀态...
3.如果子程序在處理任務過程中,父程序退出了,子程序沒有退出,那麼這些子程序就沒有父程序來管理了,就變成了僵屍程序。
4.每個程序都會有自己的PID号,(process id)子程序則PPID
《古惑仔-父程序與子程序 版》
使用者:蔣天生 飾
父程序:陳浩南 飾
子程序01:山雞 飾
子程序02:大頭 飾
1.蔣天生(使用者)發起請求,将任務派給陳浩南,陳浩南(父程序)接收到任務排程時(自己一個人處理不了),将任務派給自己的手下,山雞(子程序01)和大頭(子程序02)去做。
2.山雞和大頭在處理任務時,陳浩南在銅鑼灣坐等好消息。
3.如果此時,浩南兄被烏鴉殺了,那麼山雞和大頭就變成了僵屍程序(無人管理)
4.每個大哥都有屬于自己的武器,PID,小弟也有自己的武器,PPID
監控程序狀态
程序狀态管理指令
使用
ps
指令檢視目前的程序狀态(靜态檢視)
常用組合:
ps aux
檢視程序
[[email protected] ~]# ps aux
a:顯示所有與終端相關的程序,由終端發起的
u:顯示使用者導向的使用者清單
x:顯示所有與終端無關的程序
在多任務處理作業系統中,每個CPU(或核心)在一個時間點上隻能處理一個程序。
在程序運作時,它對 CPU 時間和資源配置設定的要求會不斷變化,進而為程序配置設定一個狀态,它随着環境要求而改變。

USER: //啟動程式的使用者
PID: //程序ID
%CPU: //占用CPU的百分比
%MEM: //占用記憶體的百分比
VSZ: //虛拟記憶體集(程序占用虛拟記憶體的空間)
RSS: //實體記憶體集(程序占用實體記憶體的空間)
TTY: //運作的終端
?: #核心運作的終端
tty1: #機器運作的終端
pts/0: #遠端連接配接的終端
STAT: //程序狀态
D: #無法中斷的休眠狀态(通IO的程序)
R: #正在運作的狀态
S: #處于休眠的狀态
T: #暫停或被追蹤的狀态
W: #進入記憶體交換(從核心2.6開始無效)
X: #死掉的程序(少見)
Z: #僵屍程序
<: #優先級高的程序
N: #優先級較低的程序
L: #有些頁被鎖進記憶體
s: #父程序(在它之下有子程序開啟着)
l: #以線程的方式運作
|: #多程序的
+: #該程序運作在前台
START: //程序被觸發開啟的時間
TIME: //該程序實際使用CPU的運作時間
COMMAND: //指令的名稱和參數
[]: #核心态的程序
沒[]: #使用者态的程序
案例一:PS指令檢視前台程序轉換到停止
#在終端上運作vim
[[email protected] ~]# vim zls.txt
#檢視vim運作的狀态,S:睡眠狀态 +:在前台運作
[[email protected] ~]# ps aux|grep [v]im
root 1306 0.0 0.2 151664 5180 pts/0 S+ 13:00 0:00 vim zls.txt
#執行ctrl + z,将程序放置背景
[1]+ 已停止 vim zls.txt
#程序狀态變成了T,暫停或被追蹤的狀态
[[email protected] ~]# ps aux|grep [v]im
root 1306 0.0 0.2 151664 5180 pts/0 T 13:00 0:00 vim zls.txt
案例二:PS指令檢視不可中斷狀态
#在終端上運作tar指令
[[email protected] ~]# tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
#持續檢視tar程序的狀态
[[email protected] ~]# ps aux|grep [t]ar
root 1348 13.3 0.0 124008 1700 pts/0 R+ 13:06 0:00 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 13.2 0.0 124008 1716 pts/0 R+ 13:06 0:00 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.7 0.0 124008 1716 pts/0 S+ 13:06 0:00 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 13.6 0.0 124008 1736 pts/0 S+ 13:06 0:00 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.1 0.0 124008 1736 pts/0 R+ 13:06 0:00 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 14.1 0.0 124008 1736 pts/0 D+ 13:06 0:00 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 13.2 0.0 124008 1756 pts/0 R+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.2 0.0 124140 1756 pts/0 R+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 14.7 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.8 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.0 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.7 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.0 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.6 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 14.9 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.2 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 14.6 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.1 0.0 124240 1952 pts/0 S+ 13:06 0:01 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.6 0.0 124240 1952 pts/0 S+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.1 0.0 124240 1952 pts/0 S+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.5 0.0 124240 1952 pts/0 S+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.2 0.1 124464 2100 pts/0 S+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.2 0.1 124616 2104 pts/0 R+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.9 0.1 124616 2104 pts/0 R+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.8 0.1 124616 2316 pts/0 D+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.7 0.1 124720 2412 pts/0 D+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.5 0.1 124720 2412 pts/0 S+ 13:06 0:02 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.0 0.1 124720 2412 pts/0 R+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.7 0.1 124720 2412 pts/0 R+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.1 124720 2412 pts/0 S+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.6 0.1 124720 2412 pts/0 S+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.3 0.1 124720 2412 pts/0 S+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.8 0.1 124720 2412 pts/0 S+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.2 0.1 124720 2412 pts/0 S+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.8 0.1 124720 2412 pts/0 S+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.2 0.1 124720 2412 pts/0 S+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.9 0.1 124720 2412 pts/0 R+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.1 124720 2412 pts/0 S+ 13:06 0:03 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.7 0.1 124720 2412 pts/0 S+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.2 0.1 124720 2412 pts/0 S+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.8 0.1 124720 2412 pts/0 S+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.1 124720 2412 pts/0 S+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.7 0.1 124720 2412 pts/0 S+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.1 124720 2412 pts/0 D+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.9 0.1 124720 2412 pts/0 R+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.6 0.1 124720 2412 pts/0 R+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.0 0.1 124720 2412 pts/0 S+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.6 0.1 124844 2600 pts/0 S+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.0 0.1 124844 2600 pts/0 S+ 13:06 0:04 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.7 0.1 124844 2600 pts/0 S+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.1 124844 2600 pts/0 S+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.8 0.1 124844 2600 pts/0 S+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.1 124844 2600 pts/0 S+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.9 0.1 124844 2600 pts/0 S+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.4 0.1 124844 2600 pts/0 S+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.3 0.1 125004 2744 pts/0 R+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.1 125004 2744 pts/0 S+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.7 0.1 125004 2744 pts/0 S+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.9 0.1 125004 2744 pts/0 R+ 13:06 0:05 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.7 0.1 125004 2744 pts/0 R+ 13:06 0:06 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.1 125004 2744 pts/0 R+ 13:06 0:06 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.0 0.1 125132 2868 pts/0 R+ 13:06 0:06 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.8 0.1 125132 2868 pts/0 S+ 13:06 0:06 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.0 0.1 125132 2868 pts/0 S+ 13:06 0:06 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.8 0.1 125164 2948 pts/0 D+ 13:06 0:06 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.3 0.1 125296 2948 pts/0 R+ 13:06 0:07 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.3 0.1 125384 2948 pts/0 R+ 13:06 0:07 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.2 0.1 125508 3228 pts/0 S+ 13:06 0:07 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.6 0.1 125572 3344 pts/0 R+ 13:06 0:07 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.7 0.1 125572 3344 pts/0 R+ 13:06 0:07 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.7 0.1 125724 3344 pts/0 R+ 13:06 0:07 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.8 0.1 125860 3344 pts/0 R+ 13:06 0:08 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.1 0.1 125860 3344 pts/0 R+ 13:06 0:08 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.0 0.1 125860 3344 pts/0 D+ 13:06 0:08 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.9 0.1 125860 3344 pts/0 S+ 13:06 0:08 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.9 0.1 125860 3604 pts/0 R+ 13:06 0:08 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.1 0.1 125860 3604 pts/0 S+ 13:06 0:08 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.0 0.1 125860 3604 pts/0 S+ 13:06 0:09 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.0 0.1 125992 3604 pts/0 S+ 13:06 0:09 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.0 0.1 125992 3604 pts/0 S+ 13:06 0:09 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.5 0.1 126152 3868 pts/0 R+ 13:06 0:09 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.4 0.2 126380 4144 pts/0 R+ 13:06 0:09 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.2 0.2 126380 4144 pts/0 S+ 13:06 0:09 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.2 0.2 126536 4144 pts/0 S+ 13:06 0:09 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.1 0.2 126672 4144 pts/0 R+ 13:06 0:09 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.9 0.2 126672 4372 pts/0 R+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.0 0.2 126672 4372 pts/0 R+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 18.0 0.2 126960 4372 pts/0 S+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.8 0.2 126960 4632 pts/0 R+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.6 0.2 127092 4756 pts/0 S+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.4 0.2 127092 4756 pts/0 S+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.1 0.2 127092 4756 pts/0 S+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.3 0.2 127224 4756 pts/0 S+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 17.0 0.2 127224 4756 pts/0 S+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.8 0.2 127224 4948 pts/0 R+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 16.9 0.2 127224 4952 pts/0 S+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
root 1348 15.5 0.2 127224 4952 pts/0 S+ 13:06 0:10 tar zcf zls.tar.gz /etc/ /usr/ /var/ /usr/
[[email protected] ~]# ps aux|grep [t]ar
[[email protected] ~]# ps aux|grep [t]ar
案例三:PS指令檢視程序Ss+狀态
#過濾bash程序,再開啟終端
[[email protected] ~]# ps aux|grep [b]ash
root 1127 0.0 0.1 115436 2084 tty1 Ss 11:49 0:00 -bash
root 1180 0.0 0.0 115436 1900 tty1 S+ 11:49 0:00 bash
root 1198 0.0 0.1 115564 2152 pts/0 Ss 11:50 0:00 -bash
root 1324 0.0 0.1 115440 2064 pts/1 Ss+ 13:01 0:00 -bash
程序管理相關指令介紹
了解程序如下選項:
PID,PPID
目前的程序狀态
記憶體的配置設定情況
CPU 和已花費的時間
使用者UID決定程序的特權
ps
指令使用方法
#對程序的CPU進行排序展示
[[email protected] ~]# ps aux --sort %cpu |less
#對程序的占用實體記憶體排序
[[email protected] ~]# ps aux --sort rss |less
#排序,是在記不住,那就自己排序
[[email protected] ~]# ps aux|sort -k3 -n
#自定義顯示字段
[[email protected] ~]# ps axo user,pid,ppid,%mem,command |grep sshd
root 869 1 0.2 /usr/sbin/sshd -D
root 1194 869 0.2 sshd: [email protected]/0
root 1307 869 0.2 sshd: [email protected]/1
root 1574 869 0.2 sshd: [email protected]/2
#顯示程序的子程序
[[email protected] ~]# yum install nginx -y
[[email protected] ~]# systemctl start nginx
[[email protected] ~]# ps auxf|grep [n]ginx
root 2033 0.0 0.1 125096 2112 ? Ss 13:29 0:00 nginx: master process /usr/sbin/nginx
nginx 2034 0.0 0.1 125484 3148 ? S 13:29 0:00 _ nginx: worker process
#檢視指定程序PID
[[email protected] ~]# ps aux|grep sshd
root 1157 0.0 0.1 105996 3604 ? Ss Feb27 0:00 /usr/sbin/sshd -D
[[email protected] ~]# cat /run/sshd.pid
1157
#pgrep常用參數, -l -a
[[email protected] ~]# pgrep sshd
869
1194
1307
1574
[[email protected] ~]# pgrep -l sshd
869 sshd
1194 sshd
1307 sshd
1574 sshd
[[email protected] ~]# pgrep -l -a sshd
869 /usr/sbin/sshd -D
1194 sshd: [email protected]/0
1307 sshd: [email protected]/1
1574 sshd: [email protected]/2
#檢視程序的pid
[[email protected] ~]# pidof sshd
1574 1307 1194 869
#檢視程序樹
[[email protected] ~]# pstree
動态監控程序
top前兩行内容解析
top
#目前系統的時間
13:48:15
#開啟時間
up 1:59,
#幾個使用者同時線上
4 users,
#平均負載:1分鐘,5分鐘,15分鐘
load average: 0.00, 0.01, 0.05
#總共工作數量103個
Tasks: 103 total,
#2個正在處理
2 running,
#99個S狀态
99 sleeping,
#2個停止狀态
2 stopped,
#0個僵屍程序
0 zombie
top第三行内容解析
%Cpu(s):
#使用者态:使用者占用CPU的百分比
0.0 us,
#核心态:系統程式占用CPU的百分比(通常核心與硬體進行互動)
0.3 sy,
dd </dev/zero >/dev/null bs=200M count=1000
#優先級:優先被排程的程式占用CPU百分比
0.0 ni,
#空閑:CPU空閑的百分比(windows也有)
99.7 id,
#等待:CPU等待IO的完成時間
0.0 wa,
#硬中斷:占CPU的百分比
0.0 hi,
由與系統相連的外設(比如網卡、硬碟)自動産生的。主要是用來通知作業系統,系統外設狀态的變化。比如當網卡收到資料包的時候,就會發出一個中斷。我們通常所說的中斷指的是硬中斷(hardirq)。
#軟中斷:占CPU的百分比
0.0 si,
為了滿足實時系統的要求,中斷處理應該是越快越好。linux為了實作這個特點,當中斷發生的時候,硬中斷處理那些短時間就可以完成的工作,而将那些處理事件比較長的工作,放到中斷之後來完成,也就是軟中斷(softirq)來完成。
#虛拟機占用實體機的百分比
0.0 st
什麼是中斷?
中斷是系統用來影響硬體裝置請求的一種機制,它會打斷程序的正常排程和執行,然後調用核心中的終端處理程式來影響裝置的請求。
為什麼要有中斷?
舉個栗子:
比如你定了一份外賣,但是不确定外賣什麼時候送到,也沒有别的方法了解外賣的進度,但是配送人員送外賣是不等人的,到了你這,沒人接取的話,直接走人了。是以你隻能苦苦的等着,時不時的去門口看看外賣送到沒有,而不能做其他的事情。
不過如果在訂外賣的時候,你就跟配送員約定好了,讓他送到給你打電話,那你就不用苦苦等着了,可以去忙别的事情了,直到電話一響,接到電話,就可以取外賣了。此時
打電話就是一個中斷的操作。
沒接到電話之前,你可以做其他事情,當你接到電話之後(就發生了中斷),你才要進行另一個動作
取外賣PS:中斷是一個異步的事件處理機制,可以提高作業系統處理并發的能力。
那麼中斷會帶來什麼問題?
由于中斷處理程式會打斷其他程序的運作,是以,為了減少對正常程序運作排程的影響,中弄斷處理程式就需要盡可能快的運作,如果中弄斷本身要做的事情不多,那麼處理起來也不會有太大的問題,但是如果中斷要處理的事情很多,中斷服務程式就有可能要運作很長時間。
特别是,中斷處理程式在影響中斷時,還會臨時關閉中斷,這就會導緻上一次中斷處理完成之前,其他中斷都能不能響應,也就是說中斷有可能會丢失。
還是以外賣為例:加入你定了2份外賣
一份主食和一份飲料,由2個不同的配送員來配送。這次你不用時時等待着,兩份外賣都約定了電話取外賣的方式。那麼問題又來了。
當第一份外賣送到時,配送員給你打了個很長的電話,商量發票處理的方式,與此同時,第二個配送員也到了,也想給你打電話,但是會占線,因為電話占線(也就關閉了中斷的響應),第二個配送給你打電話打不通,是以,那麼很有可能在嘗試幾次還占線,就走了(丢失了一次中斷)
系統的軟中斷
剛才說了丢失一次中斷,如果對于系統來說,每次都隻能處理一次中斷,那就很刺激了,天天都在丢失中斷,使用者的請求發過來,沒響應,還做個P的運維,回家種地吧...


事實上,為了解決中斷處理程式執行過長的和丢失中斷的問題,Linux将中斷處理過程分成了兩個階段:
第一階段:用來快速進行中斷,它在中斷禁止模式下運作,主要處理跟硬體緊密相關工作
第二階段:用來延遲處理第一階段未完成的工作,通常以核心線程的方式運作。
你猜的沒錯,還是外賣的那個例子:
第一階段:當你接到第一個配送員電話時,你可以跟他說,你已經知道了,其他事見面再細說,然後就可以挂斷電話了。
第二階段:才是取外賣,然後見面聊發票的處理動作。
如此一來,第一個配送員不會在電話裡占用你很長時間,第二個配送員來的時候,照樣可以打通電話。
生産例子
當網卡在接收資料包的時候,會通過硬中斷的方式通知核心,有新資料到了。這時,核心就應該調用中斷處理程式來影響它。對第一階段來說,既然是快速處理,其實就是把網卡接收到的資料包,先放置記憶體當中,然後更新一下硬體寄存器的狀态(表示資料已經讀好了),而第二階段,被軟中斷信号喚醒後,需要從記憶體中找到網絡資料,再按照網絡協定棧,對資料進行逐層解析和處理,直到把它發送給應用程式。
言簡意赅:
第一階段:直接處理硬體請求,也就是我們常說的硬中斷,特點是快速執行。
第二階段:由核心觸發該請求,也就是我們常說的軟中斷,特點是延遲執行。
Linux軟中斷與硬中斷小結:
1.Linux中弄斷處理程式分為上半部和下半部:
上半部對應硬中斷,用來快速處理
下半部對應軟中斷,用來異步處理上半部未完成的工作
2.Linux中的軟中斷包括:網絡收發,定時,排程等各種類型,可以通過
/proc/softirqs
來觀察中斷的運作情況
在企業中,會經常聽說一個問題,就是大量的網絡小包會導緻性能問題,為啥呢?
因為大量的網絡小包會導緻頻繁的硬中斷和軟中斷,是以大量的網絡小包傳輸速度很慢,但如果将所有的網絡小包"打包","壓縮"一次性傳輸,是不是會快很多。
就好比,你在某東自營買了100個快遞,都是第二天到,如果分100個快遞員,給你配送,你一天要接100個電話,老得勁了奧~~~~~~~~ 但是如果,某東隻讓一個快遞員,把你買的100個快遞,打包成一個大包裹,派送給你,會不會快很多?小老弟
top指令的使用
[[email protected] ~]# top
#指定N秒變化時間
[[email protected] ~]# top -d 1
#檢視指定程序的動态資訊
[[email protected] ~]# top -d 1 -p 10126
[[email protected] ~]# top -d 1 -p 10126,1
#檢視指定使用者的程序
[[email protected] ~]# top -d 1 -u apache
#将 2 次 top 資訊寫入到檔案
[[email protected] ~]# top -d 1 -b -n 2 > top.txt
top 常見指令
h 檢視幫出
z 高亮顯示
1 顯示所有CPU的負載
s 設定重新整理時間
b 高亮現實處于R狀态的程序
M 按記憶體使用百分比排序輸出
P 按CPU使用百分比排序輸出
R 對排序進行反轉
f 自定義顯示字段
k kill掉指定PID程序
W 儲存top環境設定 ~/.toprc
q 退出
#程序ID
PID
#使用者
USER
#優先級,正常為20
PR
#nice值,正常為0,負值表示高優先級,正值表示低優先級
NI
#虛拟記憶體占用
VIRT
#真實記憶體占用
RES
#共享記憶體占用
SHR
#模式狀态
S
#CPU占用百分比
%CPU
#記憶體占用百分比
%MEM
#運作時間
TIME+
#運作指令
COMMAND
信号管理程序
當程式運作為程序後,如果希望強行停止就可以使用kill指令對程序發送
關閉信号
,除了kill還有pkill、killall
定義守護程序的角色
結束使用者會話和程序
kill,killall,pgrep,pkill

[[email protected] ~]# kill -l //列出所有支援的信号
//常見信号清單:
數字信号 信号别名 作用
1 HUP 挂起信号,往往可以讓程序重新配置
2 INT 中斷信号,起到結束程序的作用,和ctrl + c 的作用一樣
3 QUIT 讓程序退出,結果是程序退出
9 KILL 直接結束程序,不能被程序捕獲
15 TERM 程序終止,這是預設信号
18 CONT 被暫停的程序将繼續恢複運作
19 STOP 暫停程序
20 TSTP 使用者停止請求,作用類似于ctrl + z 把程序放到背景并暫停
kill指令發送信号
// 給 vsftpd 程序發送信号 1,15
[[email protected] ~]# yum -y install vsftpd
[[email protected] ~]# systemctl start vsftpd
//發送重新開機信号,例如 vsftpd 的配置檔案發生改變,希望重新加載
[[email protected] ~]# kill -1 9160
//發送停止信号,vsftpd 服務有停止的腳本 systemctl stop vsftpd
[[email protected] ~]# kill 9160
// 給vim程序發送信号 9,15
[[email protected] ~]# touch file1 file2
//使用遠端終端1打開file1
[[email protected] ~]# tty
/dev/pts/1
[[email protected] ~]# vim file1
//使用遠端終端2打開file2
[[email protected] ~]# tty
/dev/pts/2
[[email protected] ~]# vim file2
//檢視目前程序pid
[[email protected] ~]# ps aux |grep vim
root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1
root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2
//發送15信号
[[email protected] ~]# kill 4362
//發送9信号
[[email protected] ~]# kill -9 4363
//還可以同時給所有vim程序發送信号, 模糊比對,同時給多個程序發送信号
[roo[email protected] ~]# killall vim
//使用pkill踢出從遠端登入到本機的使用者, pkill 類似killall
[[email protected] ~]# w
20:50:17 up 95 days, 9:30, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
xuliangw pts/0 115.175.115.39 20:22 0.00s 0.01s 0.00s sshd: zls [priv]
//終止 pts/0上所有程序, 除了bash本身
[[email protected] ~]# pkill -t pts/0
//終止pts/0上所有程序, 并且bash也結束(使用者被強制退出)
[[email protected] ~]# pkill -9 -t pts/0
//列出zls使用者的所有程序,-l輸出pid
[[email protected] ~]# pgrep -l -u zls
32206 sshd
32207 bash