程序和計劃任務的管理
目錄
檢視程序
控制程序
at一次性任務設定
crontab週期性任務設定
程式 二進位制對的檔案、屬於靜態
程序:是程式執行的過程,屬於動態,有生命週期及執行狀態
程式 程序 執行緒關係
執行緒包含在程序之中,是程序中實際運作單位,也是作業系統中能夠獨立執行的基本單位,
也稱作輕量程序,一個程序中可以併發多個執行緒,每條執行緒可以並行執行不同任務,而我們在任務
管理器中看到的一個個程序則由我們下載的應用程式所產生的,當然一個應用程式可以包含多個程序。
檢視程序
方法一
常用的引數
-a:顯示當前終端下的所有程序資訊,包括其他使用者的程序。與“x”選項結合時將顯示系統中所有的程序資訊。
-u:使用以使用者為主的格式輸出程序資訊。
-x:顯示當前使用者在所有終端下的程序資訊。
常用的選項組合
ps -aux #將以簡單列表的形式顯示出程序信
上述輸出資訊中,第一行為列表標題,其中各欄位的含義描述如下。
USER:啟動該程序的使用者賬號的名稱。
PID:該程序在系統中的數字 ID 號,在當前系統中是唯一的。
%CPU:CPU 佔用的百分比。
%MEM:記憶體佔用的百分比。
VSZ:該程序使用的虛擬記憶體量(KB)。
RSS:該程序佔用的實體記憶體量(KB)。
TTY:表明該程序在哪個終端上執行。不是從終端啟動的程序則顯示為?。
簡說:pts 是遠端登入終端 ctrl+ALT F1-F6 tty1 影象介面 2和6 字元介面 ? 系統本身自身執行的程序
STAT:該程序的狀態(D:不可中斷的休眠狀態:R:正在執行狀態;S:處於休眠狀態,可被喚醒;T:停止狀態,可能是在後臺暫停或程序處於跟蹤除錯狀態: Z:殭屍程序,程序已經中止,但是部分程式還在記憶體當中)
。
D:系統守護程序
T:調式、程式執行一般停止
R :該程式目前正在運作,或者是可被運作;
S :該程式目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號(signal) 喚醒。T :該程式目前正在偵測或者是停止了;
Z :該程式應該已經終止,但是其父程式卻無法正常的終止他,造成 zombie (疆屍) 程式的狀態D 不可中斷狀態.
它們含意如下::
<: 表示程序執行在高優先順序上
N: 表示程序執行在低優先順序上
L: 表示程序有頁面鎖定在記憶體中
s: 表示程序是控制程序
l: 表示程序是多執行緒的
+: 表示當前程序執行在前臺
D:系統守護程序
T 調式、程式執行一般停止
START:啟動該程序的時間。
TIME:該程序佔用的 CPU 時間。
COMMAND:啟動該程序的命令的名稱
ctrl+z [1]+ 已停止 vim a.txt
例2 D 不可中斷狀態
[root@xuegod63 ~]# tar -zcvf usr-tar.gz /usr/
#然後在另一個終端不斷檢視狀態,由 S+,R+變為 D+
ps -elf #將以長格式顯示系統中的程序資訊
-e:顯示系統內的所有程序資訊。
-1:使用長格式顯示程序資訊。
-f:使用完整的格式顯示程序資訊。
各列的解釋:
F:核心分配給程序的系統標記。
S:程序的狀態。
UID:啟動這些程序的使用者。
PID: 程序的程序ID.
PPID:父程序的程序號(如果該程序是由另一“個程序啟動的)
C:程序生命週期中的CPU利用率。
PRI:程序的優先順序(越大的數字代表越低的優先順序)。
NI: 謙讓度值用來參與決定優先順序。
ADDR:程序的記憶體地址。
SZ:假如程序被換出,所需交換空間的大致大小。
WCHAN:若該程序在睡眠,則顯示睡眠中的系統函式名。
STIME:程序啟動時的系統時間。
TTY:程序啟動時的終端裝置。 pts/0255代表虛擬終端,一般是遠端連線的終端;tty1tty7 代表本地控制檯終端
TIME:執行程序需要的累計CPU時間。
CMD:程序的啟動命令。
殭屍程序:
一個程序結束了,但是如果該程序的父程序已經先結束了,那麼該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃描當前系統中所執行的所有程序,看有沒有哪個程序是剛剛結束的這個程序的子程序,如果是的話,就由Init來接管它,成為它的父程序,子程序退出後init會回收其佔用的相關資源。但是當子程序比父程序先結束,而父程序又沒有回收子程序,釋放子程序佔用的資源,此時子程序將成為一個殭屍程序。
程序狀態。常見的狀態有以下幾種:
-D:不可被喚醒的睡眠狀態,通常用於I/O情況。
-R:該程序正在執行。
-S:該程序處於睡眠狀態,可被喚醒。
-T:停i狀態,可能是在後臺暫停或程序處於除錯狀態。
-W:記憶體互動狀態(從2.6核心開始無效)。
-X:死掉的程序(應該不會出現)。
-Z:殭屍程序。程序已經中止,但是部分程式還在記憶體當中。
-<:高優先順序(以下狀態在 BSD 格式中出現)。
-N:低優先順序。
-L:被鎖入記憶體。
-s:包含子程序。
-l:多執行緒(小寫L) 。
-+:位於後臺。
-C:程序佔用cPU的百分比
上述輸出資訊中,開頭的部分顯示了系統任務(Tasks)、CPU佔用、記憶體佔用(Mem)、交換空間(Swap)等彙總資訊,彙總資訊下方依次顯示當前程序的排名情況。相關資訊的含義表述如下。
uptime
13:22:30 當前時間
up 20days 系統執行時間 ,說明此伺服器連續執行 20 天了
2 user 當前登入使用者數
load average: 0.06, 0.60, 0.48 系統負載,即任務佇列的平均長度。 三個數值分別為 1 分鐘、5 分鐘、15 分鐘前到現在的平均值。
系統任務(Tasks)資訊
total,總程序數;
running,正在執行的程序數;
sleeping, 休眠的程序數;
stopped,中止的程序數;
zombie,僵死無響應的程序數。
CPU 佔用資訊:us,使用者佔用;
sy,核心佔用;
ni,優先順序排程佔用;
id,空閒CPU;
wa,I/O 等待佔用;
hi,硬體中斷佔用;
si,軟體中斷佔用;
st,虛擬化佔用。要了解空閒的 CPU 百分比,主要看%id 部分。
記憶體佔用(Mem)資訊:total,總記憶體空間;free,空閒記憶體;used,已用記憶體;buff/cache,實體記憶體和交換記憶體的緩衝區總和。
交換空間(Swap)佔用:total,總交換空間;free,空閒交換空間;used,已用交換空間;avail Mem,可用物理空間。
詳細說明
Tasks: 481 total 程序總數
1 running 正在執行的程序數
480 sleeping 睡眠的程序數
0 stopped 停止的程序數
0 zombie 殭屍程序數
Cpu(s): 0.0% us 系統使用者程序使用 CPU 百分比。
0.0% sy 核心中的程序佔用 CPU 百分比 優先順序排程佔用
0.0% ni 使用者程序空間內改變過優先順序的程序佔用 CPU 百分比
98.7% id 空閒 CPU 百分比
0.0% wa
cpu 等待 I/0 完成的時間總量。
測試:
終端 1:執行:top
終端 2:dd if=/dev/zero of=/a.txt count=10 bs=100M
終端 3:dd if=/dev/zero of=/a.txt count=10 bs=100M
0.0% hi(瞭解) 硬中斷消耗時間 硬體中斷佔用
硬中斷,佔的 CPU 百分比。1. 硬中斷是由硬體產生的,比如,像磁碟, 網絡卡,鍵盤,時鐘等。每個裝置或裝置集都有它自己的 IRQ(中斷請求)。基於 IRQ,CPU 可以將相應的請求分發到對應的硬體驅動上(注:硬體驅動通常是核心中的一個子程式,而不是一個獨立的程序)。# hi ->
Hardware IRQ: The amount of time the CPU has been servicing hardware interrupts.
0.0% si(瞭解) 軟中斷消耗時間 軟體中斷佔用
軟中斷,佔的 CPU 百分比。1. 通常,軟中斷是一些對 I/O 的請求。這些請求會呼叫核心中可以排程 I/O 發生的程式。對於某些裝置,I/O 請求需要被立即處理,而磁碟 I/O 請求通常可以排隊並且可以稍後處理。根據 I/O 模型的不同,程序或許會被掛起直到 I/O 完成,此時核心排程器就會選擇另一個程序去執行。I/O 可以在程序之間產生並且排程過程通常和磁碟 I/O 的方式是相同。# si -> Software Interrupts.: The amount of time the CPU has been servicingsoftware interrupts.
0.0 st (steal 偷) 虛擬化佔用。要了解空閒的 CPU 百分比,主要看%id 部分。
st:虛擬機器偷取物理的時間。比如:物理機已經運行了 KVM,XEN 虛擬機器。KVM 虛擬機器佔用物理機的 cpu 時間
Mem: 2033552k total 實體記憶體總量
340392k used 使用的實體記憶體總量
1376636k free 空閒記憶體總量
316524k buff/cache 用作核心快取的記憶體量。和 free -k 一個意思
Swap: 2017948k total 交換區總量
0k used 使用的交換區總量
192772k free 空閒交換區總量
1518148 avail Mem 總的可利用記憶體是多少
7 行程序資訊
PID 程序 id
USER 程序所有者的使用者名稱
PR 優先順序(由核心動態調整),使用者不能
NI 程序優先順序。 nice 值。負值表示高優先順序,正值表示低優先順序,使用者可以自己調整
VIRT(virtual memory usage) 虛擬記憶體,是程序正在使用的所有記憶體(ps 中標為 VSZ) VIRT:virtual memory usage 虛擬記憶體
1、程序“需要的”虛擬記憶體大小,包括程序使用的庫、程式碼、資料等
2、假如程序申請 100m 的記憶體,但實際只使用了 10m,那麼它會增長
100m,而不是實際的使用量
RES(resident memory usage) 是程序所使用的實體記憶體。實際實用記憶體(ps 中標為 RSS) RES:resident memory usage 常駐記憶體
1、程序當前使用的記憶體大小,但不包括 swap out
2、包含其他程序的共享
3、如果申請 100m 的記憶體,實際使用 10m,它只增長 10m,與 VIRT 相反
4、關於庫佔用記憶體的情況,它只統計載入的庫檔案所佔記憶體大小
SHR 共享記憶體大小,單位 kb SHR:shared memory 共享記憶體
1、除 M 了自身程序的共享記憶體,也包括其他程序的共享記憶體
2、雖然程序只使用了幾個共享庫的函式,但它包含了整個共享庫的大小
3、計算某個程序所佔的實體記憶體大小公式:RES – SHR 4、swap out 後,它將會降下來
S 程序狀態。
D=不可中斷的睡眠狀態
R=執行中或可執行S=睡眠中
T=已跟蹤/已停止Z=僵停
%CPU 上次更新到現在的 CPU 時間佔用百分比
%MEM 程序使用的實體記憶體百分比
TIME+ 程序使用的 CPU 時間總計,單位 1/100 秒
COMMAND 命令名/命令列
top 命令全屏操作介面快捷鍵:
預設 3s 重新整理一次,按 s 修改重新整理時間按空格 :立即重新整理。
P:按 CPU 排序
M:按記憶體排序
T:按時間排序
p: 程序 IP,檢視某個程序狀態 退出top -p +PID號
N 鍵根據啟動時間進行排序
數字鍵 1:顯示每個核心的 CPU 使用率u/U:指定顯示的使用者
h:可以獲得 top 程式的線上幫助資訊
q:鍵可以正常地退出 top 程式
注:若通過 top 排名工具發現某個程序 CPU 佔用率非常高,需要終止該程序的執行,可以在 top 操作介面中按 k 鍵,然後在列表上方將會出現“PID to signal/kill [default pid = 3180]:” 的提示資訊,根據提示輸入指定程序的 PID 號並按 Enter 鍵, 出現“Send pid 5597 signal [15/sigterm]”的二次確認的提示資訊,然後按Enter 鍵確認即可終止對應的程序。
pgrep -l "log"
pgrep -l -U root -t tty1
pstree -aup apache
&後臺執行
jobs -l 檢視後臺執行
fg 2後臺調到前臺
kill -9 +PID號 #強行殺死
killall -9 vim #殺死所有
指定使用者的程序 殺死
pkill -9 -U "cheng5"
[root@dc4 ~]# pkill -9 -U "cheng5"
[root@dc4 ~]# date
2021年 12月 30日 星期四 19:12:53 CST
[root@dc4 ~]# at 19:15 2021-12-30
at> pgrep -U root|wc -l>/tmp/ps.root
at> <EOT>
job 1 at Thu Dec 30 19:15:00 2021
[root@dc4 ~]# cat /tmp/ps.root
cat: /tmp/ps.root: 沒有那個檔案或目錄
[root@dc4 ~]# cat /tmp/ps.root
214
[root@dc4 ~]# cat /tmp/ps.root
214
使用 crontab 命令管理使用者的計劃任務
設定使用者的週期性計劃任務列表主要通過 crontab 命令進行,結合不同的選項可以完成不同的計劃任務管理操作。常用的選項如下。
-e:編輯計劃任務列表。
-u:指定所管理的計劃任務屬於哪個使用者,預設是針對當前使用者(自己),一般只有 root 使用者有許可權使用此選項(用於編輯、刪除其他使用者的計劃任務)。
-l:列表顯示計劃任務。
-r:刪除計劃任務列表。
下面將分別講解 crontab 命令相關選項的使用。
crontab -u 使用者名稱 #指定XX使用者的cron服務
crontab -l #列出當前使用者下的cron的詳細內容
crontab -u zx -l #列出zx使用者下的cron的詳細內容
crontab -r #刪除所有使用者的cron內容,普通使用者執行,只刪除自己的cron內容
crontab -r -u zx #刪除zx使用者的cron內容
crontab -e #編輯cron服務
總結
檢視程序的命令(ps、top、pgrep、pstree)
程序控制
啟動程序、排程程序、終止程序
at命令設定計劃任務
crontab計劃任務的配置欄位