天天看點

CentOS 7程序和計劃任務管理(理論+實踐)

程式

儲存在硬碟、CD光牒等媒體中的可執行代碼和資料

靜态儲存的代碼

程序

在<code>CPU</code>及記憶體中運作的程式代碼

動态執行的代碼

父、子程序

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

簡單的說,程式是指電腦可以識别運作的指令集合。程序是一個正在執行的程式。程序是程式的一部分,程式運作的時候會産生程序。

了解系統中程序的狀态是對程序進行管理的前提,使用不同的指令工具可以從不同的 角度檢視程序狀态。

<code>ps</code>指令——檢視靜态的程序統計資訊

指令格式

<code>ps [選項]</code>

常用選項

<code>a</code>:顯示目前終端下的所有程序資訊,包括其他使用者的程序。

<code>u</code>:使用以使用者為主的格式輸出程序資訊。

<code>x</code>:顯示目前使用者在所有終端下的程序資訊。

<code>-e</code>:顯示系統内的所有程序資訊。

<code>-l</code>:使用長格式顯示程序資訊。

<code>-f</code>:使用完整的格式顯示程序資訊。

在上面的輸出資訊中,第一行為清單标題,其各字段含義如下:

<code>USER</code>:啟動該程序的使用者賬号的名稱。

<code>PID</code>:該程序在系統中的數字 ID 号,在目前系統中是唯一的。

<code>%CPU</code>:CPU 占用的百分比。

<code>%MEM</code>:記憶體占用的百分比。

<code>VSZ</code>:占用虛拟記憶體(swap 空間)的大小。

<code>RSS</code>:占用常駐記憶體(實體記憶體)的大小。

<code>TTY</code>:表明該程序在哪個終端上運作。“?”表示未知或不需要終端。

<code>STAT</code>:顯示程序目前的狀态,如 S(休眠)、R(運作)、Z(僵死)、&lt;(高優先級)、 N(低優先級)、s(父程序)、+(前台程序)。

<code>START</code>:啟動該程序的時間。

<code>TIME</code>:該程序占用的 CPU 時間。

<code>COMMAND</code>:啟動該程序的指令的名稱。

在上面的輸出資訊中,我們可以看出兩個輸出結果相比較來說ps -elf輸出的内容更為全面,其清單字段也有些不同,含義如下:

<code>UID</code>:與上面的USER含義相同。

<code>PPID</code>:目前程序的父程序。

<code>C</code> :cpu的占用 。

<code>PRI</code> :優先級(使用者态的優先級)。

<code>NI</code> :核心優先級(-20~19) 數值越低優先級越高。

<code>ADDR</code> :運作狀态 (-表示正在運作)。

<code>SZ</code> : 表示占用swap交換分區容量。

<code>WCHAN</code>:目前程序核心态的名稱

直接執行不帶任何選項的 ps 指令時,将隻顯示目前使用者會話中打開的程序:

<code>top</code>指令——檢視程序動态資訊

使用 <code>ps</code> 指令檢視到的是一個靜态的程序資訊,并不能連續地回報出目前程序的運作狀态。若希望以動态重新整理的方式顯示各程序的狀态資訊,可以使用 <code>top</code>指令。<code>top</code>指令将會在目前終端以全屏互動式的界面顯示程序排名,及時跟蹤包括<code>CPU</code>、記憶體等系統資源占用情況,預設情況下每三秒鐘重新整理一次,其作用基本類似于<code>Windows</code>作業系統中的任務管理器。

上述輸出資訊中,開頭的部分顯示了系統任務<code>(Tasks)</code>、<code>CPU</code>占用、記憶體占用<code>(Mem)</code>、交換空間<code>(Swap)</code>等彙總資訊,相關資訊的含義表述如下:

<code>Tasks</code>系統任務資訊:<code>total</code>:總程序數;<code>running</code>:正在運作的程序數;<code>sleeping</code>:休眠的程序數;<code>stopped</code>:中止的程序數;<code>zombie</code>:僵死無響應的程序數

<code>CPU</code>占用資訊:<code>us</code>:使用者占用;<code>sy</code>:核心占用;<code>ni</code>:優先級排程占用;<code>id</code>:空閑 <code>CPU</code>,<code>wa</code>:<code>I/O</code> 等待占用;<code>hi</code>:硬體中斷占用;<code>si</code>:軟體中斷占用;<code>st</code>:虛拟化占用

<code>Mem</code>記憶體占用資訊:<code>total</code>:總記憶體空間;<code>free</code>:空閑記憶體;<code>used</code>:已用記憶體;<code>buff/cache</code>:實體記憶體和交換記憶體的緩沖區總和

<code>Swap</code>交換空間占用:<code>total</code>:總交換空間;<code>free</code>:空閑交換空間;<code>used</code>:已用交換空間;<code>avail Mem</code>:可用實體空間。

在top指令模式下還可以通過<code>"c鍵"</code>會根據<code>CPU</code>占用情況來排序清單;<code>"m鍵"</code>會根據記憶體占用情況來排序;<code>“q鍵“</code>退出模式

<code>pgrep</code> 指令——查詢程序資訊

通過<code>pgrep</code>指令,可以隻指定程序的一部分名稱進行查詢

常用格式

-l: [程序名稱]

-U [使用者名稱]

-t [終端]

<code>pstree</code> 指令——檢視程序樹

<code>pstree</code> 指令可以輸出<code>Linux</code>作業系統中各程序的樹形結構,以更加直覺地判斷各程序之間的互相關系(父程序、子程序)。

-a:顯示完整資訊

-u:列處對應使用者名

-p:列出對應PID号

也可以隻檢視屬于指定使用者的程序樹結構,隻要指定使用者名作為參數即可。

1、啟動程序

在 <code>Linux</code>作業系統中,可以由使用者手工啟動或者按預訂計劃排程啟動新的程序

手工啟動程序

前台啟動:使用者輸入指令,直接執行程式

背景啟動:在指令行尾加入“&amp;”符号

排程啟動

使用<code>at</code>指令,設定一次性計劃任務

使用<code>crontab</code>指令,設定周期性計劃任務

2、改變程序的運作方式

<code>Ctrl+Z</code>組合鍵挂起目前的程序

當 Linux 作業系統中的指令正在前台執行時,按<code>Ctrl+Z</code> 組合鍵可以将目前指令調入背景并停止執行。

<code>jobs</code>指令——檢視背景的程序

需要檢視目前終端中在背景運作的程序任務時,可以使用 <code>jobs</code> 指令,結合<code>“-l”</code>選項可以同時顯示該程序對應的 <code>PID</code>号。

<code>fg</code>指令——将背景的程序恢複運作

使用 <code>fg</code>指令可以将背景任務重新恢複到前台運作。除非背景中的任務隻有一個,<code>fg</code> 指令需要指定背景程序的任務編号作為參數。

<code>bg</code>指令——将背景中暫停執行任務在背景恢複執行

使用<code>bg</code>指令,可以将背景中暫停執行(如按<code>Ctrl+Z</code> 組合鍵挂起)的任務恢複運作,繼續在背景執行操作,除非背景中的任務隻有一個,否則 <code>bg</code>指令需要指定背景程序的任務編号作為參數。

3、終止程序執行

<code>kill</code>指令——用于終止指定<code>PID</code>号的程序

通過 kill 指令終止程序時,需要使用程序的 <code>PID</code> 号作為參數。無特定選項時,<code>kill</code> 指令将給該程序發送終止信号并正常退出運作,若該程序已經無法響應終止信号,則可以結合<code>“-9”</code>選項強行終止程序。

<code>killall</code>指令——用于終止指定名稱的所有程序

使用<code>killall</code>指令可以通過程序名稱來終止程序,當需要結束系統中多個相同名稱的程序時,使用 <code>killall</code> 指令将更加友善,效率更高。<code>killall</code> 指令同樣也有<code>“-9”</code>選項。

<code>pkill</code>指令——根據特定條件終止相應的程序

使用 <code>pkill</code>指令可以根據程序的名稱、運作該程序的使用者、程序所在的終端等多種屬性終止特定的程序,大部分選項與<code>pgrep</code>指令基本類似。

<code>-U</code>:根據程序所屬的使用者名終止相應程序

<code>-t</code>:根據程序所在的終端終止相應程序

<code>-9</code>:強制結束程序(結合-U指令可以強制指定使用者下線)

在<code>Linux</code> 作業系統中,除了使用者即時執行的指令操作以外,還可以配置在指定的時間、指定的日期執行預先計劃的系統管理任務(如定期備份、定期采集監測資料)。<code>CentOS</code> 系統中預設已安裝了<code>at</code>、<code>cronie</code>軟體包,通過 <code>atd</code>和 <code>crond</code>這兩個系統服務實作一次性、周期性計劃任務的功能,并分别通過 <code>at</code>、<code>crontab</code> 指令進行計劃任務設定。

設定一次性計劃任務時,在<code>at</code> 指令行中依次指定計劃執行任務的時間、日期作為參數(若隻指定時間則表示當天的該時間,若隻指定日期則表示該日期的目前時間),确認後将進入帶<code>“at&amp;gt;”</code>提示符的任務編輯界面,每行設定一條執行指令,可以依次設定多條語句,最後按 <code>Ctrl+D</code> 組合鍵送出任務。所設定的指令操作将在計劃的時間點被依次執行。

<code>at [HH:MM] [YYYY-MM-DD]</code>

<code>atq</code>指令:檢視計劃性任務

<code>atrm [序列号]</code>:删除任務

使用<code>crontab</code> 指令設定的計劃任務可以按預設的周期重複執行,進而大大減輕設定重複性系統管理任務的操作。啟用周期性任務也有一個前提條件,即對應的系統服務<code>crond</code>必須已經運作。

1、<code>crontab</code> 的配置檔案和目錄

<code>/etc/crontab</code>——系統任務配置檔案

)<code>/var/spool/cron/</code>——使用者 <code>cron</code>任務的配置檔案存放目錄

由使用者自行設定的<code>cron</code>計劃任務将被儲存到目錄<code>/var/spool/cron/</code>中,檔案名與使用者名相同。

2、使用 <code>crontab</code> 指令管理使用者的計劃任務

<code>crontab [選項] [-u 使用者名]</code>

-e :編輯計劃任務

-l:檢視計劃任務

-r:删除計劃任務

周期性計劃任務書寫格式

<code>* * * * * run_command</code>

字段

含義

說明

*

分鐘

取值為0~59之間的任意整數

小時

取值為0~23之間的任意整數

日期

取值為1~31之間的任意整數

月份

取值為1~12之間的任意整數

星期

取值為0~7之間的任意整數,0或7代表星期日

run_command

指令

要執行的指令或程式腳本

時間數值的特殊表示方法

<code>“*”</code>:表示該範圍内的任意時間

<code>“,”</code>:表示間隔的多個不連續的時間點

<code>“-”</code>:表示一個連續的時間範圍

<code>“/”</code>:指定間隔的時間頻率

33 00 /usr/bin/cp -r /home/sun /opt/ //每天00:33分執行複制指令

~

:wq //儲存退出

[root@localhost ~]# crontab -l //檢視周期性計劃任務

33 00 /usr/bin/cp -r /home/sun /opt/ //設定的周期性計劃任務

[root@localhost ~]# crontab -r //删除周期性計劃任務

no crontab for root //沒有設定的周期性計劃任務