1. 程式人生 > 其它 >程序和任務計劃管理

程序和任務計劃管理

目錄:

一、程式和程序的關係

二、檢視程序資訊ps

三、檢視程序資訊top

四、檢視程序資訊pgrep

五、檢視程序樹pstree

六、程序的啟動方式

七、程序的前後臺排程

八、終止程序的執行

九、計劃任務管理

一、程式和程序的關係

1)程式

  • 儲存在硬碟、光碟等介質中的可執行程式碼和資料
  • 檔案中靜態儲存的程式碼

2)程序

  • 在CPU及記憶體中執行的程式程式碼
  • 動態執行的程式碼
  • 父、子程序

每個程式可以建立一個或多個程序

二、檢視程序資訊ps

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

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

pgrep命令

根據特定條件查詢程序PID資訊

1 pgrep -l "log"

2 #-l 顯示程序名,預設時只輸出PID號

4 pgrep -l -U 指定特定使用者 -t 指定終端

五、檢視程序樹pstree

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/使用者名稱
管理crontab計劃任務:
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