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

程序和計劃任務管理

一、程式和程序的關係

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,進入互動頁面

2.4.3 vim /etc/crontab 進入全域性配置檔案編輯並儲存退出