管理進程任務(wù)
1. 監(jiān)視查看進程
1.1 ps命令
格式: ps? [選項]
作用:顯示進程的狀態(tài)。沒有選項的時候顯示當前用戶在當前終端啟動的進程。
選項:*高亮的為常用選項
a |
顯示所有進程 |
u |
指定用戶的所有進程 |
x |
顯示當前用戶在所有終端下的進程信息 |
c |
顯示進程的真實名稱k|--sort 屬性 對屬性排序,屬性前加 - 表示倒序 ? ?ps aux k -%cpu |
e |
顯示環(huán)境變量 |
f |
顯示程序間的關(guān)系 |
r |
顯示當前中斷的進程 |
T |
顯示當前終端的所有進程 |
-e |
顯示系統(tǒng)內(nèi)所有的進程信息,等同于-A |
-f |
使用完整的格式顯示進程信息 |
-l |
將目前屬于用戶自己這次登入的PID與相關(guān)信息列示出來,使用長格式顯示 |
-o |
pid,ppid,pgrp,tpgid,cmd、%cpu、%mem... 選項顯示定制的信息,輸出指定的字段 |
-H |
顯示樹狀結(jié)構(gòu) |
-a |
顯示統(tǒng)一終端下的所有程序 |
-N |
反向選擇 |
k|--sort |
對屬性排序,屬性前加 - 表示倒序 ? ?ps aux k -%cpu |
ps aux命令輸出格式的各字段詳解:
選項 |
功能 |
USER |
行程擁有者,該進程是由哪個用戶產(chǎn)生的 |
PID |
pid,進程的 ID |
%CPU |
CPU使用率 |
%MEM |
內(nèi)存使用率 |
VSZ |
占用的虛擬內(nèi)存的大小 |
RSS |
占用實際物理內(nèi)存的大小 |
TTY |
終端的次設(shè)備號,該進程是在哪個終端運行的。其中,tty1 ~ tty7 代表本地控制臺終端(可以通過 Alt+F1 ~ F7 快捷鍵切換不同的終端),tty1~tty6 是本地的字符界面終端,tty7 是圖形終端。pts/0 ~ 255 代表虛擬終端,一般是遠程連接的終端,第一個遠程連接占用 pts/0,第二個遠程連接占用 pts/1,依次増長。?代表和終端無關(guān),系統(tǒng)進程 |
START |
進程的狀態(tài)如下: D:不可中斷的靜止,通常用于 I/O 情況。 R:正在執(zhí)行中 S:靜止狀態(tài),可以被喚醒 T:暫停執(zhí)行 Z:僵尸狀態(tài) W:沒有足夠的內(nèi)存分頁可分配,內(nèi)存交互狀態(tài) X:死掉的進程(應(yīng)該不會出現(xiàn)) <:高優(yōu)先序的行程 N:低優(yōu)先序的行程 L:有記憶體分頁分配并鎖在內(nèi)存內(nèi) s:包含子進程 l:多線程(小寫 L) +:位于后臺。 |
START |
進程開始的時間 |
TIME |
執(zhí)行的時間,該進程占用 CPU 的運算時間,注意不是系統(tǒng)時間 |
COMMAND |
所執(zhí)行的命令 |
ps? -elf命令輸出格式的各字段詳解:
選項 |
功能 |
F |
進程標志,說明進程的權(quán)限,常見的標志有兩個: 1:進程可以被復(fù)制,但是不能被執(zhí)行;4:進程使用超級用戶權(quán)限 |
S |
進程狀態(tài)。具體的狀態(tài)和"psaux"命令中的 STAT 狀態(tài)一致 |
UID |
運行此進程的用戶的 ID |
PID |
進程的 ID |
PPID |
父進程的 ID |
C |
該進程的 CPU 使用率,單位是百分比 |
?PRI? |
進程的優(yōu)先級,數(shù)值越小,該進程的優(yōu)先級越高,越早被 CPU 執(zhí)行;系統(tǒng)定義不可以人為修改 |
NI |
?進程的優(yōu)先級,數(shù)值越小,該進程越早被執(zhí)行;可以人為修改? |
ADDR |
該進程在內(nèi)存的哪個位置 |
SZ |
該進程占用多大內(nèi)存 |
WCHAN |
該進程是否運行。"-"代表正在運行 |
TTY |
該進程由哪個終端產(chǎn)生 |
TIME |
該進程占用 CPU 的運算時間,注意不是系統(tǒng)時間 |
CMD |
產(chǎn)生此進程的命令名 |
部分相關(guān)選項所拓展的綜合命令:
1)與grep組合用法,查找特定的進程
2)列出類似程序樹的程序顯示
3)找出與cron與syslog這兩個服務(wù)有關(guān)的PID
4)如果不想看到所有的進程,只想查看一下當前登錄產(chǎn)生了哪些進程,那只需使用 "ps -l" 命令
拓展:
prtstat命令
作用:查看進程信息
1.2 pstree命令
格式:pstree? [選項]
作用:以樹狀的方式表項進程的父子關(guān)系。清楚的表達進程間的相互關(guān)系。如果指定用戶名稱,會以隸屬于該用戶的第一個進程作為根然后顯示該用戶的所有進程;如果不指定,則會把系統(tǒng)啟動時的第一個進程視為根,并顯示之后的所有進程。不加選項,默認只顯示各進程的名稱。
主要選項:*高亮的為常用選項
-a |
顯示每個程序的完整指令,包含路徑,參數(shù)或是常駐服務(wù)的標示 |
-c |
不使用精簡標示法 |
-G |
使用VT100終端機的列繪圖字符 |
-h |
列出樹狀圖時,特別標明現(xiàn)在執(zhí)行的程序。 |
-H |
和-h類似,但特別標明(高亮顯示)指定的程序 |
-l |
采用長列格式顯示樹狀圖 |
-n |
用程序識別碼排序,預(yù)設(shè)是以程序名稱來排序 |
-p |
顯示程序識別碼(PID) |
-u |
顯示用戶名稱 |
-U |
使用UTF-8列繪圖字符 |
-T |
不顯示線程thread,默認顯示線程 |
1.3 top命令
格式:top? [-d秒數(shù)]
功能:動態(tài)顯示CPU利用率,內(nèi)存利用率和進程狀態(tài)等相關(guān)信息,是目前使用最廣泛的實時系統(tǒng)性能監(jiān)視系統(tǒng)。默認每5秒更新顯示信息,"??-d秒數(shù)? "選項可指定刷新頻率。
ps 命令可以一次性給出當前系統(tǒng)中進程狀態(tài),但使用此方式得到的信息缺乏時效性,并且,如果管理員需要實時監(jiān)控進程運行情況,就必須不停地執(zhí)行 ps 命令,這顯然是缺乏效率的。為此,Linux 提供了 top 命令。top 命令可以動態(tài)地持續(xù)監(jiān)聽進程地運行狀態(tài),與此同時,該命令還提供了一個交互界面,用戶可以根據(jù)需要,人性化地定制自己的輸出,進而更清楚地了進程的運行狀態(tài)。
主要選項:
-b |
以批處理模式顯示程序信息,一般和"-n"選項合用,用于把 top 命令重定向到文件中 |
-c |
顯示完整命令 |
-d |
指定 top 命令每隔幾秒更新。默認是 3 秒 |
-n |
指定 top 命令執(zhí)行的次數(shù)(也可以表示更新幾次后停止更新顯示),一般和"-"選項合用 |
-S |
以累積模式顯示程序信息 |
-s |
使 top 命令在安全模式(不使用交互指令)中運行,避免在交互模式中出現(xiàn)錯誤 |
-p |
查看指定 ID 的進程 |
-u?? 用戶名 |
只監(jiān)聽某個用戶的進程 |
然后執(zhí)行top命令后,在 top 命令的顯示窗口中,還可以使用如下按鍵,進行一下交互操作:
?或 h |
顯示交互模式的幫助 |
c |
按照CPU的使用率排序,默認遵循此選項排序 |
M |
按照內(nèi)存的使用率排序 |
N |
按照PID排序 |
T |
按照CPU的累積運算時間排序,也就是按照“TIME+項”排序 |
k |
按照PID給予某個進程一個信號,一般用于終止某個進程,信號9是強制中止的信號 |
r |
按照PID給某個進程重設(shè)優(yōu)先級(Nice)值 |
q |
退出top命令 |
2. 搜索查找進程
pgrep命令
格式: pgrep? ?[options]? pattern
作用:通過程序的名字或其他屬性查找進程,一般用來判斷程序是否正在運行。在服務(wù)器的配置和管理中,這個工具常被應(yīng)用,簡單明了。pgrep程序檢查系統(tǒng)中活動的進程,報告進程屬性,匹配命令行上指定條件的進程ID。每一個進程 ID以一個十進制數(shù)表示,通過一個分割字符串和下一個ID分開,默認的分割字符串是一個新行。對于每個屬性選項,用戶可以在命令行上指定一個以逗號分割的可能值的集合。
-U或-u |
指定用戶進程 |
-l |
顯示進程名 |
-a |
顯示完整格式的進程名 |
-P |
顯示指定進程的子進程 |
注:有時候已知程序名不知道pid號,我們可以使用如下命令:
pidof? ?命令
作用:根據(jù)進程名 來找pid號
3. 控制管理進程
3.1 kill命令
格式:kill ?[信號] ?PID
作用:kill 從字面來看,就是用來殺死進程的命令,但事實上,這個或多或少帶有一定的誤導(dǎo)性。從本質(zhì)上講,kill 命令只是用來向進程發(fā)送一個信號,至于這個信號是什么,是用戶指定的。而且通常中止一個前臺進程可以使用Ctrl+c,對于后臺進程就需要使用kill命令來中止,就需要先使用ps/pidof/pstree/top/等工具獲取PID。
也就是說,kill 命令的執(zhí)行原理是這樣的,kill 命令會向操作系統(tǒng)內(nèi)核發(fā)送一個信號(多是終止信號)和目標進程的 PID,然后系統(tǒng)內(nèi)核根據(jù)收到的信號類型,對指定進程進行相應(yīng)的操作。
注:kill 命令是按照 PID 來確定進程的,所以 kill 命令只能識別 PID,而不能識別進程名。Linux 定義了幾十種不同類型的信號,可以使用 kill -l 命令查看所有信號及其編號。
日常主要的信號代碼如下:
-0 |
給所有在當前進程組中的進程發(fā)送信號,程序退出時收到該信息 |
-1 |
掛掉電話線或終端連接的掛起信號,這個信號也會造成某些進程在沒有終止的情況下重新初始化 |
-2 |
表示結(jié)束進程,但并不是強制性的,常用的 "Ctrl+C" 組合鍵發(fā)出就是一個 kill -2 的信號 |
-3 |
退出 |
-9 |
殺死進程,即強制結(jié)束進程 |
-11 |
段錯誤 |
-15 |
正常結(jié)束進程,是 kill 命令的默認信號 |
-17 |
將進程掛起 |
-19 |
將掛起的進程激活 |
3.2 killall命令
格式:killall ?[選項] ?[信號] ?進程名
作用:killall 也是用于關(guān)閉進程的一個命令,但和 kill 不同的是,killall 命令不再依靠 PID 來殺死單個進程,而是通過程序的進程名來殺死一類進程,也正是由于這一點,該命令常與 ps、pstree 等命令配合使用。
選項:
-i |
交互式,詢問是否要殺死某個進程 |
-l |
忽略進程名的大小寫 |
3.3 pkill命令
格式:pkill ?[信號代碼] ?進程名
作用:當作于管理進程時,pkill 命令和 killall 命令的用法相同,都是通過進程名殺死一類進程。
前臺進程與后臺進程
默認情況下,一個命令執(zhí)行后,此命令將獨占Shell,并拒絕其他輸入。稱為前臺進程。反之,則稱為后臺進程。對每一個終端,都允許有多個后臺進程。對前臺進程/后臺進程的控制與調(diào)度,被稱為任務(wù)控制。
將一個前臺進程放入后臺:
command &? ? ? ? ? ?#將一個進程直接放入后臺。
ctrl + z? ? ? ? ? ? #將一個正在運行的前臺進程暫時停止,并放入后臺。
控制后臺進程:
jobs? ? ? ? ? ? ? ? ? ? #列出系統(tǒng)作業(yè)號和名稱
fg? [%作業(yè)號]? ? ? ? ? ? ? #前臺恢復(fù)運行
bg [%作業(yè)號]? ? ? ? ? ? ? #后臺恢復(fù)運行
kill [%作業(yè)號]? ? ? ? ? ? ?#給對應(yīng)的作業(yè)發(fā)送中止信號
注:& 還可以并行執(zhí)行任務(wù)
如:ping 127.0.0.1&ping 127.0.0.2&ping 127.0.0.3&
調(diào)度進程
1. at 調(diào)度
格式:at? [選項]? [時間]
作用:設(shè)置指定時間執(zhí)行指定的命令(一次性的調(diào)度)
選項
-f |
從指定文件而非標準輸入設(shè)備獲取將要執(zhí)行的命令 |
-l |
顯示等待執(zhí)行的調(diào)度作業(yè) |
-d |
刪除指定的調(diào)度作業(yè) |
進程開始執(zhí)行的時間格式如下:
絕對計時法:
HH:MM
采用24小時計時制,如果采用12小時計時制,則需要在時間后面加上AM或PM。
比如 04:00 AM。如果時間已過,則它會在第二天的同一時間執(zhí)行。
MMDDYY 或 MM/DD/YY 或 DD.MM.YY
指定具體日期,必須在 “HH:MM” 后,比如 011518 表示 2018 年 1 月 15 號。
相對計時法:
now+時間間隔
以 minutes、hours、days 或 weeks 為單位
例如 now+5 days 表示命令在 5 天之后的此時此刻執(zhí)行。
直接計時法:
today? ? ? ? ? ? ? ? ? ? ? ? ? 今天
tomorrow? ? ? ? ? ? ? ? ? ? 明天
Midnight(midnight)深夜,代表 12:00 AM(也就是 00:00)
Noon(noon)? ? ? ? ? ?中午,代表 12:00 PM(相當于 12:00)
Teatime(teatime)? ?下午茶,代表 4:00 PM(相當于 16:00)
2. batch調(diào)度
格式:batch? [選項]? [時間]
作用:與at命令幾乎一模一樣,二者命令的選項也相同。唯一的區(qū)別在于,如果不指定運行時間,進程將在系統(tǒng)較空閑時運行。batch調(diào)度適合于時間上要求不高,但是運行時占用系統(tǒng)資源較多的工作。
3. cron調(diào)度
at調(diào)度和batch調(diào)度中指定的命令只能執(zhí)行一次,但是實際工作時,,有些命令需要在指定日期和時間重復(fù)執(zhí)行,這時,cron調(diào)度就能很好滿足這一點。
cron調(diào)度與crond進程 , crontab命令和crontab配置文件有關(guān)。
3.1 crontab配置文件
用戶的crontab配置文件保存于 “/var/spool/cron” 目錄中,其文件名與用戶名相同。crontab配置文件保存cron調(diào)度的內(nèi)容,共有6個字段,從左到右依次為分鐘、時、日期、月份、星期和命令,如表所示。
字段 |
* |
* |
* |
* |
* |
|
分鐘 |
時 |
日期 |
月份 |
星期 |
命令 |
|
取值范圍 |
0~59 |
0~23 |
01~31 |
01~12 |
0~6,0為星期天 |
1)所有字段不能為空,字段之間用空格分開,如果不指定字段內(nèi)容,則使用 “*”符號,代表任何時間。
2)可使用 “-”符號表示。如在日期字段中輸人“1一5”,表示每個月前5天每天都要執(zhí)行該命令。
3)可使用 "," 符號來表示指定的時間。如在日期字段中輸入“5,15,25”,則表示每個月的5日、15日? ? ? ? 和25日都要執(zhí)行該命令。
4)可使用 "/(正斜線)" 代表每隔多久執(zhí)行一次。比如"*/10****命令",代表每隔 10 分鐘就執(zhí)行一? ? ? ? ? 次命令。
5)如果執(zhí)行的命令未使用輸出重定向,那么系統(tǒng)把執(zhí)行結(jié)果以郵件的方式發(fā)送給crontab文件的? ? ? ? ? 所有者,用戶可用mail命令查看郵件。
3.2 crontab 命令
格式: crontab? [選項]
作用:維護用戶的crontab配置文件
選項
-e |
創(chuàng)建并編輯crontab配置文件 |
-l |
顯示crontab配置文件的內(nèi)容 |
-r |
刪除crontab配置文件 |
-i |
在刪除用戶的 crontab 文件時,給確認提示。 |
-u |
用來設(shè)定某個用戶的 crontab 服務(wù),例如 "-u demo" 表示設(shè)備 demo 用戶的 crontab 服務(wù),此選項一般有 root 用戶來運行 |
3.3 crond進程
crond進程在系統(tǒng)啟動時自動啟動,并一直運行于后臺。crond 進程負責(zé)檢測crontab配置文件,并按照其設(shè)置內(nèi)容定期重復(fù)執(zhí)行指定的cron調(diào)度工作。創(chuàng)建或修改了crontab配置文件后,要用“service crond restart”命令重啟crond服務(wù)。
注:在創(chuàng)建crontab 定時任務(wù)時,需要注意以下幾個事項:文章來源:http://www.zghlxwxcb.cn/news/detail-821936.html
6 個選項都不能為空,必須填寫。如果不確定,則使用“*”代表任意時間。
crontab 定時任務(wù)的最小有效時間是分鐘,最大有效時間是月。像 2018 年某時執(zhí)行、3 點 30 分 30 秒這樣的時間都不能被識別。
在定義時間時,日期和星期最好不要在一條定時任務(wù)中出現(xiàn),因為它們都以天為單位,非常容易讓管理員混淆。
在定時任務(wù)中,不管是直接寫命令,還是在腳本中寫命令,最好都使用絕對路徑。有時使用相對路徑的命令會報錯。文章來源地址http://www.zghlxwxcb.cn/news/detail-821936.html
到了這里,關(guān)于Linux之進程管理篇(2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!