程序和任務計劃管理
目錄:
1)程式
- 儲存在硬碟、光碟等介質中的可執行程式碼和資料
- 檔案中靜態儲存的程式碼
2)程序
- 在CPU及記憶體中執行的程式程式碼
- 動態執行的程式碼
- 父、子程序
每個程式可以建立一個或多個程序
1)方法一:ps aux
檢視靜態的程序統計資訊
- a∶ 顯示終端上的所有程序,包括其它使用者的程序。
- u∶ 表示列出程序的使用者。
- x∶ 顯示所有終端的程序。
各列的解釋∶
- USER∶ 程序的使用者。
- PID∶ 程序的ID。
- %CPU∶程序佔用的CPU百分比。
- %MEM∶佔用記憶體的百分比。
- VSZ∶ 該程序使用的虛擬記憶體量(KB)。
- RSS∶ 該程序佔用的實體記憶體量(KB)。
- TTY∶啟動程序的終端名。不是從終端啟動的程序則顯示為 ‘?’
- STAT∶該程序的狀態(D∶不可中斷的休眠狀態;R∶正在執行狀態;s∶處於休眠狀態,可被喚醒;T∶停止狀態,可能是在後臺暫停或程序處於跟蹤除錯狀態; z∶ 殭屍程序,程序已經中止,但是部分程式還在記憶體當中)
- START∶ 該程序被觸發啟動時間。
- TIME∶該程序實際使用CPU執行的時間。
- COMMAND∶ 程序的啟動命令。
殭屍程序∶
—個程序結束了, 但是如果該程序的父程序已經先結束了, 那麼該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃描當前系統中所執行的所有程序,看有沒有哪個程序是剛剛結束的這個程序的子程序, 如果是的話,就由Init來接管它,成為它的父程序,子程序退出後init會回收其佔用的相關資源。
但是當子子程序比父程序先結束,而父程序又沒有回收一子程序, 釋放子程序佔用的資源, 此時子程序將成為—個殭屍程序。
2)方法二:ps -elf
- -e∶ 顯示系統內的所有程序資訊。
- -l∶ 使用長格式顯示程序資訊。
- -f∶ 使用完整的格式顯示程序資訊。
- -a∶ 顯示所有程序pid。
- -T∶ 檢視執行緒資訊。
ps -aT 顯示所有執行緒
各列的解釋∶
- F∶ 核心分配給程序的系統標記。
- S∶ 程序的狀態。
- UID∶ 啟動這些程序的使用者。
- PID∶ 程序的程序ID。
- PPID∶父程序的程序號(如果該程序是由另一個程序啟動的)。
- C∶程序生命週期中的CPU利用率。
- PRI∶ 程序的優先順序(越大的數字代表越低的優先順序)。
- NI∶謙讓度值用來參與決定優先順序。
- ADDR∶程序的記憶體地址。
- SZ∶ 假如程序被換出,所需交換空間的大致大小。
- WCHAN∶ 若該程序在睡眠,則顯示睡眠中的系統函式名。
- STIME∶ 程序啟動時的系統時間。
- TTY∶ 程序啟動時的終端裝置。
- TIME∶ 執行程序需要的累計CPU時間。
- CMD∶ 程序的啟動命令。
top命令:檢視動態的程序統計資訊
第一行為 任務佇列資訊
11∶06∶48 系統時間
up 1∶22 系統已執行時長
1 user 當前登入使用者數
load average: 0.06,0.60,0.48
系統負載,即單位時間內系統處理的任務數,後面三個數值分別為1分鐘、5分鐘、15分鐘前到現在的平均值
第二行為 程序資訊
- 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 可用物理空間
程序資訊區各列解釋∶
- PID 程序id
- USER 程序所有者的使用者名稱
- PR 優先順序
- NI 謙讓度值。負值表示高優先順序,正值表示低優先順序
- VIRT 程序使用的虛擬記憶體總量,單位kb
- RES 程序使用的實體記憶體大小,單位kb
- SHR 共享記憶體大小,單位kb
- S 程序狀態
- %CPU 上次更新到現在的CPU時間佔用百分比
- %MEM 程序使用的實體記憶體百分比
- TIME+ 程序使用的CPU時間總計,單位1/100秒
- COMMAND 命令名/命令列
top常用命令∶
- P 鍵∶ 根據CPU使用百分比大小進行排序
- M 鍵∶ 根據駐留記憶體大小進行排序
- N 鍵∶ 根據啟動時間進行排序
- c 鍵∶ 切換顯示命令名稱和完整命令列
- h 鍵∶ 可以獲得 top程式的線上幫助資訊
- k 鍵∶根據提示輸入指定程序的 PID 號並按 Enter 鍵終止對應的程序
- q 鍵∶退出 top 程式
- 數字1 鍵∶ 顯示CPU個數和狀態
top -H∶ 顯示所有執行緒
top -H -p <pid>∶ 顯示特定程序中的執行緒
舉例
tty終端
Centos7系統,tty1表示圖形介面,tty2-tty6表示文字介面,可以用Ctrl+Alt+F1-F6切換
pts說明是用遠端工具連線的,比如xshell,後面的數字代表登入的時間順序,越小證明登入的越早
pgrep命令
根據特定條件查詢程序PID資訊
1 pgrep -l "log"
2 #-l 顯示程序名,預設時只輸出PID號
4 pgrep -l -U 指定特定使用者 -t 指定終端
pstree命令
以樹形結構列出程序資訊
pstree -aup #-a 顯示完整資訊 #-u 列出對應使用者名稱 #-p 列出對應PID號 pstree -ap 指定使用者
六、程序的啟動方式
1)手工啟動
• 前臺啟動: 使用者輸入命令,直接執行程式
• 後臺啟動: 在命令列尾加入“&”符號
cp /dev/cdrom mycd.iso &
2) 排程啟動
• 使用at命令,設定一次性計劃任務
• 使用crontab命令,設定週期性計劃任務
七、程序的前後臺排程
1) Ctrl + Z組合鍵
將當前程序掛起,即調入後臺並停止執行
2)jobs 命令
• jobs [-l]
• 檢視處於後臺的任務列表
3) fg 命令
將後臺程序恢復到前臺執行,可指定任務序號
1) Ctrl + C 組合鍵
中斷正在執行的命令
2) Kill、Killall命令
- kill用於終止指定PID號的程序
- killall用於終止指定名稱相關的所有程序
- -9選項用於強制終止
3) pkill命令
• 根據特定條件終止相應的程序
• 常用命令選項
- -∪: 根據程序所屬的使用者名稱終止相應程序
- -t: 根據程序所在的終端終止相應程序
pgrep -l -U "指定使用者” #檢視 pkill -9 -U "指定使用者” #強殺 pgrep -l -U "指定使用者”
九、計劃任務管理
1)at命令
一次性計劃任務
2) crontab 命令• 按照預先設定的時間週期 分鐘、小時、天、月、周重複執行使用者指定的命令操作 • 屬於週期性計劃任務 • 主要設定檔案
- 全域性配置檔案,位於檔案: /etc/crontab
- 系統預設的設定,位於目錄: /etc/cron.*/
- 使用者定義的設定,位於檔案: /var/spool/cron/使用者名稱
1 編輯計劃任務 2 crontab -e [-u 使用者名稱] 3 #-u預設預設是針對當前使用者 4 5 檢視計劃任務 6 crontab -l [-u 使用者名稱] 7 8 刪除計劃任務 9 crontab -r [-u 使用者名稱]
crontab任務配置格式:
分鐘-小時-日期-月份-星期 命令或者指令碼檔案
周的數字為0或7時,都代表“星期天”的意思 時間數值的特殊表示方法
• * 表示該範圍內的任意時間
• , 表示間隔的多個不連續時間點
• - 表示一個連續的時間範圍
• / 指定間隔的時間頻率 示例
• 0 17 * * 1-5
週一到週五每天17:00 • 30 8 * * 1,3,5
每週一、三、五的8點30分 • 0 8-18/2 * * *
8點到18點之間每2小時 • 0 * */3 * *
每3天 crontab -e [-u root] 1.每分鐘定時執行一.次規則:
每1分鐘執行: * /1 * * * * 或者 * * * * *
每5分鐘執行: * /5 * * * * 2.每小時定時執行一次規則:
每小時執行: 0 * * * * 或者 0 * /1 * * *
每天.上午7點執行: 0 7 * * *
每天上午7點10分執行: 10 7 * * * 3.每天定時執行一次規則:
每天執行 0 0 * * * 4.每週定時執行一次規則:
每週執行 0 0 * *1 5.每月定時執行一次規則:
每月執行 0 0 1 * * 6.每年定時執行–次規則:
每年執行 0 0 1 1 * 其他例子 5 * * * * ls
指定每小時的第5分鐘執行一次ls命令 30 5 * * * ls
指定每天的5:30執行ls命令 30 7 8 * * ls
指定每月8號的7: 30分執行ls命令 30 5 8 6 * ls
指定每年的6月8日5: 30執行ls命令 30 6 * * 0 ls
指定每星期日的6:30執行ls命令
[注: 0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等] 30 3 10,20 * * ls
每月10號及20號的3: 30執行ls命令
[注: “,"用來連線多個不連續的時段] 25 8-11 * * * ls
每天8-11點的第25分鐘執行ls命令
[注: “-”用來連線連續的時段] */15 * * * * ls
每15分鐘執行一次ls命令
[ 即每個小時的第 0 15 30 45 60分鐘執行ls命令] 30 6 */10 * * ls
每個月中,每隔10天6:30執行一 次ls命令
[即每月的1、11、21、31日是的6: 30執行一次ls命令 ] */10 10-16 * 1,6 6 /usr/bin/ls -l
1,6月的每個週六從上午10點到下午的4點的每10分鐘執行ls -l 方法二: echo ‘30 7 * * 6 /usr/bin/systemctl httpd restart’ >> /var/spool/cron/ root