1. 程式人生 > 其它 >Linux作業系統中程序和計劃管理

Linux作業系統中程序和計劃管理

1. 程式與程序的關係

2. 檢視程序資訊-ps

3. 檢視程序資訊-top

4. 檢視程序資訊-pgrep

5. 檢視程序樹-pstree

6.程序的啟動方式與後臺排程

7.終止程序的執行

8. 計劃任務管理

1. 程式與程序的關係

 程式

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

 程序

  • CPU及記憶體執行的程式程式碼
  • 動態執行的程式碼
  • 父、子程序
  • 每個程式可以建立一個或多個程序

 程序與執行緒的關係

  • 一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒
  • 資源分配給程序,同一程序內的所有執行緒共享該程序的所有資源
  • 執行緒在執行過程中需要協作同步。不同程序中的執行緒之間要利用訊息通訊的方法實現同步;
  • 處理機分配給執行緒,即真正在處理機上執行的是執行緒
  • 執行緒是程序的一個執行單元,也是程序內的可呼叫實體。

  (資源分配的最小單位-程序程式執行的最小單位-執行緒

2. 檢視程序資訊-ps

 方法一

1 ps aux
2 檢視靜態的程序統計資訊

  a:顯示終端上的所有程序,包括其它使用者的程序
  u:表示列出程序的使用者
  x:顯示所有終端的程序

 欄位解釋

  USER:程序的使用者
  PID:程序的ID
  %CPU:程序佔用的CPU百分比
  %MEM:佔用記憶體的百分比
  VSZ:該程序使用的虛擬記憶體量

(KB)
  RSS:該程序佔用的實體記憶體量(KB)
  TTY:啟動程序的終端名不是從終端啟動的程序則顯示為”?“
  STAT:程序的狀態D:不可中斷的休眠狀態R:正在執行狀態;S:處於休眠狀態可被喚醒T:停止狀態,可能是在後臺暫停程序處於跟蹤除錯狀態Z:殭屍程序程序已經中止但是部分程式還在記憶體當中
  START:該程序被觸發啟動時間
  TIME:該程序實際使用CPU執行的時間
  COMMAND:程序的啟動命令

 方法二

1 ps -elf
2 檢視靜態的程序統計資訊
3 ps -aT
4 顯示所有執行緒

  -e:顯示系統內的所有程序資訊
  -l:使用長格式顯示

程序資訊
  -f:使用完整的格式顯示程序資訊
  -a:顯示所有程序PID
  -T:檢視執行緒資訊

 欄位解釋

  F:核心分配給程序的系統標記
  S:程序的狀態
  UID:啟動這些程序的使用者
  PID:程序的程序ID
  PPID:父程序的程序號(如果該程序是由另一個程序啟動的)
  C:程序生命週期中的CPU利用率
  PRI:程序的優先順序(越大的數字代表越低的優先順序)
  NI:謙讓度值用來參與決定優先順序
  ADDR:程序的記憶體地址
  SZ:假如程序被換出,所需交換空間的大致大小
  WCHAN:若該程序在睡眠,則顯示睡眠中的系統函式名
  STIME:程序啟動時的系統時間
  TTY:程序啟動時的終端裝置
  TIME:執行程序需要的累計CPU時間
  CMD:程序的啟動命令

3. 檢視程序資訊-top

1 top
2 檢視動態的程序排名資訊

 第一行任務佇列資訊

1 14:09:16       系統時間
2 up 2:55        系統已執行時長
3 1 user          當前登入使用者數
4 load average: 0.00, 0.01, 0.05  系統負載,即單位時間內系統處理的任務數,後面三個數值分別為1分鐘5分鐘15分鐘前到現在的平均值

 第二行為程序資訊

 1 Tasks       總程序數
 2 running      正在執行的程序數
 3 sleeping     休眠的程序數
 4 stopped      中止的程序數
 5 zombie       僵死的程序數

殭屍程序:

  一個程序結束了,但是如果該程序的父程序已經先結束了,那麼該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃描當前系統中所執行的所有程序,看有沒有哪個程序是剛剛結束的這個程序的子程序,如果是的話,就由Init來接管它,成為它的父程序,子程序退出後init會回收其佔用的相關資源
  但是當子程序比父程序先結束,而父程序又沒有回收子程序,釋放子程序佔用的資源,此時子程序將成為一個殭屍程序

 第三行為CPU資訊

1 us   使用者佔用
2 sy   核心佔用
3 ni   優先順序排程佔用
4 id   空閒CPU,要了解空閒的CPU百分比,主要看%id 部分(=總-us-sy-ni5 wa   I/O等待佔用
6 hi   硬體中斷佔用
7 si   軟體中斷佔用
8 st   虛擬化佔用

 第四行為記憶體資訊

1 total            總記憶體空間
3 free             空閒記憶體
5 used             已用記憶體
7 buff/cache       實體記憶體和交換記憶體的緩衝區總和

 第五行為交換空間資訊

1 total             總交換空間
2 free              空閒交換空間
3 used              已用交換空間
4 avail Mem         可用物理空間

常用命令

1 P鍵根據CPU使用百分比大小進行排序
2 M鍵:根據駐留記憶體大小進行排序
3 N鍵:根據啟動時間進行排序
4 c鍵:切換顯示命令名稱和完整命令列
5 h鍵:可以獲得top程式的線上幫助資訊
6 k鍵:根據提示輸入指定程序的PID號並按Enter鍵終止對應的程序
7 q鍵退出top程式
8 數字1鍵顯示CPU個數和狀態
1 top -H            顯示所有執行緒
2 top -H -P <pid>   顯示特定程序中的執行緒

 tty 終端

  • Centos7系統,tty1表示圖形介面tty2-tty6表示文字介面,可以用Ctrl+Alt+F1-F6切換
  • pts說明是用遠端工具連線的,比如xshell,後面的數字代表登入的時間順序,越小證明登入的越早

4. 檢視程序資訊-pgrep

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

1 pgrep -l "ce"
2 -l:顯示程序名,預設時只輸出PID號
3 -U:指定特定使用者
4 -t:指定終端

5. 檢視程序樹-pstree

 以樹形結構列出程序資訊

1 pstree -aup
2 -a                    顯示完整資訊
3 -u                    列出對應使用者名稱
4 -p                    列出對應PID號
5 pstree -ap 指定使用者    檢視指定使用者程序樹

6.程序的啟動方式與後臺排程

 手工啟動

  • 前臺啟動:使用者輸入命令直接執行程式
  • 後臺啟動:在命令列尾加入“&”符號
1 cp -R /data /opt &   
2 複製過程中可以後臺執行(輸出資訊中包括後臺任務序號和PID號

 程序的前後臺排程

1 Ctrl + Z組合鍵
2 將當前程序掛起,即調入後臺並停止執行
3  
4 jobs 命令
5 jobs [-l]        檢視處於後臺的任務列表
6 
7 fg 命令
8後臺程序恢復到前臺執行,可指定任務序號

7.終止程序的執行

1 Ctrl + C 組合鍵
2 中斷正在執行的命令
3 
4 Kill、Killall命令
5 kill               用於終止指定PID號的程序
6 killall            用於終止指定名稱相關的所有程序
7 -9 選項             用於強制終止

 pkill 命令

  根據特定條件終止相應的程序

常用命令

  -∪:根據程序所屬的使用者名稱終止相應程序
  -t:根據程序所在的終端終止相應程序

1 pgrep -l -U "指定使用者”
2 #檢視
3 pkill -9 -U "指定使用者”
4 #強行終止

8. 計劃任務管理

 at 命令

  一次性計劃任務

1 at [HH:MM] [yyyy-mm-dd]
2 
3 atq         #檢視未執行的任務列表
4 
5 atrm 1      #刪除第一條任務

 crontab 命令

  • 按照預先設定的時間週期 分鐘、小時、天、月、周重複執行使用者指定的命令操作
  • 屬於週期性計劃任務
  • 主要設定檔案

  全域性配置檔案,位於檔案: /etc/crontab
  系統預設的設定,位於目錄: /etc/cron.*/
  使用者定義的設定,位於檔案: /var/spool/cron/使用者名稱

 管理crontab計劃任務

1 編輯計劃任務
2 crontab -e [-u 使用者名稱]
3 #-u預設預設是針對當前使用者
1 檢視計劃任務
2 crontab -l [-u 使用者名稱]
1 刪除計劃任務
2 crontab -r [-u 使用者名稱]

 crontab任務配置格式

分鐘-小時-日期-月份-星期 命令或者指令碼檔案
欄位 說明
分鐘 取值為從0到59之間的任意整數
小時 取值為從0到23之間的任意整數
日期 取值為從1到31之間的任意整數
月份 取值為從1到12之間的任意整數
星期 取值為從0到7之間的任意整數,0或7代表星期日
命令 要執行的命令或程式指令碼

 時間數值的特殊表示方法

  • * 表示該範圍內的任意時間
  • , 表示間隔的多個不連續時間點
  • - 表示一個連續的時間範圍
  • / 指定間隔的時間頻率

 應用示例

1 0 17 * * 1-5          週一到週五每天17:00
2 30 8 * * 1,3,5        每週一、三、五的8點30分
3 0 8-18/2 * * *        8點到18點之間每2小時
4 0 * */3 * *           每3天

  crontab -e [-u root] (最好用絕對路徑)

 每分鐘定時執行一次規則

1 每1分鐘執行: * /1 * * * * 或者 * * * * *
2 每5分鐘執行: * /5 * * * *

 每小時定時執行一次規則

1 每小時執行:0 * * * * 或者 0 * /1 * * *
2 每天上午7點執行:0 7 * * *
3 每天上午7點10分執行:10 7 * * *

 每天定時執行一次規則

1 每天執行:0 0 * * *

 每週定時執行一次規則

1 每週執行:0 0 * *1

 每月定時執行一次規則

1 每月執行:0 0 1 * *

 每年定時執行–次規則

1 1 每年執行:0 0 1 1 *
 1 10 * * * * ls       指定每小時的第10分鐘執行一次ls命令
 2 30 10 * * * ls      指定每天的10:30執行ls命令
 3 30 10 10 * * ls     指定每月10號的10: 30分執行ls命令
 4 30 10 10 10 * ls    指定每年的10月10日10: 30執行ls命令
 5 30 10 * * 0 ls      指定每星期日的10:30執行ls命令
 6 30 10 10,20 * * ls  每月10號及20號的3: 30執行ls命令  [“,”用來連線多個不連續的時段]
 7 30 8-11 * * * ls    每天8-11點的第30分鐘執行ls命令   [“-”用來連線連續的時段]
 8 */15 * * * * ls     每15分鐘執行一次ls命令[即每個小時的第 0 15 30 45 60分鐘執行ls命令]
 9 30 10 */10 * * ls   每個月中,每隔10天10:30執行一 次ls命令[即每月的1、11、21、31日是的10: 30執行一次ls命令]
10 */10 10-16 * 1,6 6 /usr/bin/ls -l    1,6月的每個週六從上午10點到下午的4點的每10分鐘執行ls -l
1 echo '30 7 * * 7 /usr/bin/systemctl httpd restart' >> /var/spool/cron/root