程序和計劃任務管理
一、程式和程序的關係
1、程式
- 儲存在硬碟、光碟等介質中的可執行程式碼和資料
- 檔案中靜態儲存的程式碼
2、程序
- 在CPU及記憶體中執行的程式程式碼
- 動態執行的程式碼
- 父、子程序
- 每個程式可以建立一個或多個程序
2.1 執行緒和程序的關係
2.1.1執行緒:程式執行的最小單位
- 執行緒 是CPU排程的最小單位(程式執行流的最小單元),它被包含在程序之中,是程序中的實際運作單元。
- 一條執行緒是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務
- (一個執行緒掛掉會影響其他執行緒,而程序之間是互相隔離的,互不影響)
2.1.2 程序:資源分配的最小單位
- 程序 是程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。
- 從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的基本單位
總的來說:程序有獨立的地址空間,執行緒沒有單獨的地址空間(同一程序內的執行緒共享程序的地址空間)
三、檢視程序資訊
1、檢視靜態程序資訊——ps命令
1.1 ps aux 命令
1.1.1 格式
ps aux #基本格式(aux前面可不加——)
ps aux | wc -l #結合管道符號查詢具體的數量(需要-1)
1.1.2 常用選項
- a: 顯示終端上的所有程序,包括其它使用者的程序。
- u: 表示列出程序的使用者。
- x: 顯示所有終端的程序。
1.1.3 顯示程序的資訊(包含各列解釋)
各列名稱 | 涵義 |
USER | 程序的使用者 |
PID | 程序的ID |
%CPU | 程序佔用的CPU百分比 |
%MEM | 佔用記憶體的百分比 |
VSZ | 該程序使用的虛擬記憶體量(KB) |
RSS | 該程序佔用的實體記憶體量(KB) |
TTY | 啟動程序的終端名。不是從終端啟動的程序則顯示為? (本地終端是用tty1,tty2表示,pts是遠端終端) |
STAT: |
該程序的狀態 (D:不可中斷的休眠狀態;R:正在執行狀態;S:處於休眠狀態,可被喚醒;T:停止狀態,可能是在後臺暫停或程序處於跟蹤除錯狀態; Z: 殭屍程序,程序已經中止,但是部分程式還在記憶體當中 (檢視殭屍程序,及時將其kill); w 進入記憶體交換(從核心2.6開始無效);X,死掉的程序;< 高優先順序; N 低優先順序;L 有些頁被鎖進記憶體;s 包含子程序;+ 位於後臺的程序組;l 多執行緒,克隆執行緒) |
START | 該程序被觸發啟動時間 |
TIME | 該程序實際使用CPU執行的時間 |
COMMAND | 程序的啟動命令 |
補充知識:
殭屍程序:
一個程序結束了,但是如果該程序的父程序已經先結束了,那麼該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃描當前系統中所執行的所有程序,看有沒有哪個程序是剛剛結束的這個程序的子程序,如果是的話,就由Init來接管它,成為它的父程序,子程序退出後init會回收其佔用的相關資源。
但是當子程序比父程序先結束,而父程序又沒有回收子程序,釋放子程序佔用的資源,此時子程序將成為一個殭屍程序。
2檢視靜態程序資訊——ps -elf 命令
2.1 格式
ps -elf #檢視程序資訊,前面的—必須要加
與ps aux 一樣都能檢視程序資訊,顯示內容稍許不同,看個人喜好使用
如果想檢視程序的CPU佔用率和記憶體佔用率,可以使用aux
如果想檢視程序的父程序ID和完整的COMMAND命令,可以使用-elf
2.2 常用選項
- -e: 顯示系統內的所有程序資訊
- -l: 使用長格式顯示程序資訊
- -f: 使用完整的格式顯示程序資訊
- -a:顯示所有程序PID
- -T:檢視執行緒資訊
- ps -aT顯示所有執行緒
2.3 顯示程序的資訊(包含各列解釋)
各列解釋:
名稱 | 涵義 |
F | 核心分配給程序的系統標記 |
S | 程序的狀態 |
UID | 啟動這些程序的使用者 |
PID | 程序的程序ID |
PPID | 父程序的程序號(如果該程序是由另一個程序啟動的) |
C | 程序生命週期中的CPU利用率 |
PRI | 程序的優先順序(越大的數字代表越低的優先順序) |
NI | 謙讓度值用來參與決定優先順序 |
ADDR | 程序的記憶體地址 |
SZ | 假如程序被換出,所需交換空間的大致大小 |
WCHAN | 若該程序在睡眠,則顯示睡眠中的系統函式名 |
STIME | 程序啟動時的系統時間 |
TTY | 程序啟動時的終端裝置 |
TIME | 執行程序需要的累計CPU時間 |
CMD | 程序的啟動命令 |
3、檢視動態程序資訊 ——top命令
3.1 格式
top #檢視動態程序資訊
3.2 顯示程序的資訊(展示的行列解釋)
3.2.1 五行資訊解釋
行列名稱 | 各欄位涵義 |
第一行任務佇列資訊 | 14 : 09 : 16(系統時間)up 5:31(系統已執行時長)2user(當前登入使用者數)oad average: 0.00, 0.01, 0.05(系統負載,即單位時間內系統處理的任務數,後面三個數值分別為1分鐘、5分鐘、15分鐘前到現在的平均值)(Load Average的值應該小於CPU個數*核數*0.7) |
第二行為程序資訊 |
Tasks(總程序數)running(正在執行的程序數)sleeping(休眠的程序數)stopped(中止的程序數) zombie(僵死的程序數) |
第三行為CPU資訊 |
us(使用者佔用)sy(核心佔用)ni(優先順序排程佔用)id(空閒CPU,要了解空閒的CPU百分比,主要看%id 部分)wa(I/O等待佔用)hi(硬體中斷佔用)si(軟體中斷佔用)st(虛擬化佔用) |
第四行為記憶體資訊 | total(總記憶體空間)free(空閒記憶體)used(已用記憶體)buff/cache(實體記憶體和交換記憶體的緩衝區總和) |
第五行為交換空間資訊 |
total(總交換空間)free(空閒交換空間)used(已用交換空間)avail Mem(可用物理空間) |
3.2.2 各列解釋
各列名稱 | 涵義 |
PID | 程序id |
USER | 程序所有者的使用者名稱 |
PR | 優先順序 |
NI | 謙讓度值。負值表示高優先順序,正值表示低優先順序 |
VIRT | 程序使用的虛擬記憶體總量,單位kb |
RES | 程序使用的實體記憶體大小,單位kb |
SHR | 共享記憶體大小,單位kb |
S | 程序狀態 |
%CPU | 上次更新到現在的CPU時間佔用百分比 |
%MEM | 程序使用的實體記憶體百分比 |
TIME+ | 程序使用的CPU時間總計,單位1/100秒 |
COMMAND | 命令名/命令列 |
3.3top常用命令
快捷鍵 | 作用 |
P鍵 | 根據CPU使用百分比大小進行擁序 |
M鍵 | 根據駐留記憶體大小進行排序 |
N鍵 | 根據啟動時間進行排序 |
c鍵 | 切換顯示命令名稱和完整命令列 |
h鍵 | 可以獲得top程式的線上幫助資訊 |
k鍵 | 根據提示輸入指定程序的PID號並按Enter 鍵終止對應的程序 |
q鍵 | 退出top程式 |
數字1鍵 | 顯示CPU個數和狀態 |
tty終端
Centos7系統,tty1表示圖形介面,tty2-tty6表示文字介面,可以用Ctrl+Alt+F1-F6切換
pts說明是用遠端工具連線的,比如xshell,後面的數字代表登入的時間順序,越小證明登入的越早
檢視執行緒 top -H;ps -T
top -H -p <pid>:顯示特定程序中的執行緒
4、檢視程序資訊 ——pgrep
4.1 格式
pgrep "log" #預設只輸出PID號
4.2 常用選項
選項 | 功能 |
---|---|
-l | 顯示程序名 |
-U | 指定特定使用者 |
-t | 指定終端 |
4.3 例項操作
5、檢視程序樹 ——pstree
1、格式
pstree -aup
#-a 顯示完整資訊
#-u 列出對應使用者名稱
#-p 列出對應PID號
pstree -ap 指定使用者
2、例項操作
四、程序的啟動方式
1、手工啟動
1.1前臺啟動: 使用者輸入命令,直接執行程式
cp /dev/cdrom mycd.iso
1.2 後臺啟動: 在命令列尾加入“&”符號
cp /dev/cdrom mycd.iso &
1.3 例項操作
2、排程啟動
使用at命令,設定一次性計劃任務
使用crontab命令,設定週期性計劃任務
後面會詳細介紹,在此不多做解釋了
五、程序的前後臺排程
1、Ctrl + Z組合鍵
將當前程序掛起,即調入後臺並停止執行
2、jobs 命令
• jobs [-l] #顯示PID號 • 檢視處於後臺的任務列表
3、fg 命令
將後臺程序恢復到前臺執行,可指定任務序號
4、例項操作
六、終止程序的執行
1、Ctrl + C 組合鍵
中斷正在執行的命令
2、Kill、Killall命令
kill用於終止指定PID號的程序
killall用於終止指定名稱相關的所有程序
-9選項用於強制終止(可能會導致資料的丟失,能不用就不用)
2.1 例項操作
2.1.1 使用kill來終止記憶體較大的程序(kill+程序號)
2.1.2 使用killall可以終止與指定名稱相關的程序(killall容易造成誤殺,可以用kill+程序號精確殺死程序)
3、pkill命令
根據特定條件終止相應的程序
常用命令選項:
-∪: 根據程序所屬的使用者名稱終止相應程序
-t: 根據程序所在的終端終止相應程序
七、計劃任務管理
1、at命令
一次性計劃任務
at [HH:MM] [yyyy-mm-dd] #指定時間設定任務(不加年月日表示當天)ctrl+D退出
atq #檢視未執行的任務列表
atrm 【任務序號】 #刪除第一條任務
1.1 例項操作
2、使用crontab命令,設定週期性計劃任務
2.1週期性計劃任務的概念
• 按照預先設定的時間週期 分鐘、小時、天、月、周重複執行使用者指定的命令操作
• 屬於週期性計劃任務
2.2crontab的主要配置檔案
- 全域性配置檔案,位於檔案: /etc/crontab(保持預設值)
- 系統預設的設定,位於目錄: /etc/cron.*/(保持預設值)
- 使用者定義的設定,位於檔案: /var/spool/cron/使用者名稱
2.3管理crontab計劃任務:
crontab -e [-u 使用者名稱] #編輯計劃任務,-u預設時表示當前使用者
crontab -l [-u 使用者名稱] #檢視計劃任務
crontab -r [-u 使用者名稱] #刪除計劃任務
2.3 編輯crontab的格式
2.5 編輯crontab計劃任務的三種方法:
2.4.1 crontab -e 進入編輯頁面直接編輯並儲存退出
2.4.2echo ‘30 7 * * 6 /usr/bin/systemctl httpd restart’ >> /var/spool/cron/ root
將編輯的任務重定向追加到crontab的配置檔案中,也可以進入互動頁面直接編輯(vim /var/spool/cron/root)
輸入vim /var/spool/cron/root,進入互動頁面