文章目錄 一、查看進程 1.查看進程信息--ps 1.1 方法一:ps -aux 1.2 方法二:ps -elf 1.3 其他示例 2.查看進程信息--top 2.1 示例圖 2.2系統任務(第一行)和進程(第二行)的信息 2.3 CPU(第三行)、內存(第四行)的信息和交換空間(第五行)的相關信息 2.4 進程信息區各列詳解 2.5 TOP 常用命令 3.查看進程信息--pgrep 4.查看進程樹--pstree 二、控制進程 1.進程的啟動方式 2.進程的前后臺調度 2.1 掛起當前進程 2.2 查看后臺的進程 2.3 將后臺的進程恢復運行 3.終止進程執行 3.1 kill 3.2 killall 3.3 pkill 三、一次性計劃任務--at 四、計劃任務管理--crontab 1.配置文件和目錄 1.1 系統任務配置文件,位于文件:/etc/crontab 1.2 系統默認的設置,位于目錄:/etc/cron.*/ 1.3 用戶定義的設置,位于文件:/var/spool/cron/ 2.管理crontab計劃任務 3.crontab 任務配置的格式 4.時間數值的特殊表示方法 5.其他
一、查看進程
程序是保存在外部存儲介質(如硬盤、光盤)中的可執行機器代碼和數據的靜態集合(文件中靜態保存的代碼) 進程是在CPU及內存中處于動態執行狀態的計算機程序 在Linux系統中,每個程序啟動后可以創建一個或多個進程
1.查看進程信息–ps
ps命令是Linux系統中最為常見的進程查看工具,主要用于顯示包括包含當前運行的各進程完整信息的靜態快照 通過不同的命令選項,可以有選擇性的查看進程信息
1.1 方法一:ps -aux
a:顯示當前終端下的所有進程信息,包括其他用戶的進程,與“x”選項結合使用時將顯示系統中所有的進程信息 u:使用以用戶為主的格式輸出進程信息 x:顯示當前用戶在所有終端下的進程信息 將以簡單列表的形式顯示出進程信息
##例:
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 2.6 0.3 46344 6908 ? Ss 16:47 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 16:47 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 16:47 0:00 [kworker/0:0]
root 4 0.0 0.0 0 0 ? S< 16:47 0:00 [kworker/0:0H]
##省略...
名詞解釋 USER 進程的用戶 PID 進程的ID %CPU 進程占用的CPU百分比 %MEN 占用內存的百分比 VSZ 該進程使用的虛擬內存量(KB) RSS 該進程使用的物理內存量(KB) TYY 啟動該進程的終端名;若不是從終端啟動的進程則顯示為“?” STAT 該進程的狀態(D:不可中斷的休眠狀態;R:正在運行狀態;S:處于休眠狀態,可被喚醒;s,父進程;T:停止狀態,可能是在后臺暫停或進程處于跟蹤調試狀態;Z:僵尸進程,進程已經終止,但是大部分程序還在內存當中;<:高優先級狀態;+:前臺進程)7 START 該進程被觸發啟動時間 TIME 該進程實際使用CPU運行的時間 COMMAND 進程的啟動命令
名詞解釋(僵尸進程): 已經結束了一個進程,但是它任然還占用著內存,也稱之為僵死
1.2 方法二:ps -elf
e:顯示系統內的所有進程信息 l:使用長格式顯示進程信息 f:使用完整的格式顯示進程信息 將以長格式顯示系統中的進程信息,并且包含更豐富的內容
##例:
[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 32068 ep_pol 16:47 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea 16:47 ? 00:00:00 [kthreadd]
1 S root 4 2 0 60 -20 - 0 worker 16:47 ? 00:00:00 [kworker/0:0H]
1 S root 5 2 0 80 0 - 0 worker 16:47 ? 00:00:00 [kworker/u256:0]
##省略...
名詞解釋 F 內核分配給進程的系統標記 S 進程的狀態 UID 啟動這些進程的用戶 PID 進程的進程ID PPID 父進程的進程號(如果該進程是由另一個進程啟動的) C 進程生命周期中的CPU利用率 PRI 進程的優先級(越大的數字代表越低的優先級) NI 謙讓度值用來參與決定優先級 ADDR 進程的內存地址 SZ 假如進程被換出,所需交換空間的大致大小 WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名 STIME 進程啟動時的系統時間 TTY 進程啟動時的終端設備 TIME 運行進程需要的累計CPU時間 CMD 進程的啟動命令
在CentOs7系統,tty1表示圖形界面,tty2-tty6表示文字界面,可以用Ctrl+Alt+(F1-F6)切換
1.3 其他示例
直接執行不帶任何選項的ps命令時,將只顯示當前用戶會話中打開的進程
[root@localhost ~]# psPID TTY TIME CMD1803 pts/0 00:00:00 bash2219 pts/0 00:00:00 ps
由于系統中運行的進程數量較多,需要查詢某一個進程的信息時可以結合管道符號和grep命令進行過濾
[root@localhost ~]# ps aux | grep bash ##過濾出包含“bash”的信息
root 666 0.0 0.0 115408 940 ? S 16:47 0:00 /bin/bash /usr/sbin/ksmtuned
root 1803 0.0 0.1 116328 3020 pts/0 Ss 16:47 0:00 -bash
root 2256 0.0 0.0 112828 976 pts/0 S+ 17:10 0:00 grep --color=auto bash
2.查看進程信息–top
使用ps命令查看到的是一個靜態的進程信息,并不能連續地反饋當前進程的運行狀態 若希望以動態刷新的方式顯示各進程的狀態信息,可以使用本命令 默認情況下每三秒刷新一次
2.1 示例圖
[root@localhost ~]# top
2.2系統任務(第一行)和進程(第二行)的信息
相關信息含義// 18:55:08 系統時間 Tasks 總進程數 up 2:07 系統已運行時間 running 正在運行的進程數 1 user 當前登錄用戶數 sleeping 休眠的進程數 load average:0.00,0.01,0.05 系統負載,即單位時間內系統處理的任務數,后面三個數值分別為1分鐘、5分鐘、15分鐘到現在的平均值 stopped 中止的進程數 / / zombie 僵死的進程數
2.3 CPU(第三行)、內存(第四行)的信息和交換空間(第五行)的相關信息
相關信息含義//// us 用戶占用 total 總內存空間 total 總交換空間 sy 內核占用 free 空閑內存 free 空閑交換空間 ni 優先級調度占用 used 已用內存 used 已用交換空間 id 空閑CPU,要了解空閑的CPU百分比,主要看%id部分 buff/cahe 物理內存和交換內存的緩沖區總和 avail Mem 可用物理空間 wa I/O等待占用 / / / / hi 硬件中斷占用 / / / / si 軟件中斷占用 / / / / st 虛擬化占用 / / / /
2.4 進程信息區各列詳解
信息解釋 PID 進程id USER 進程所有者的用戶名 PR 優先級 NI 謙讓度值,負值表示高優先級,正值表示低優先級 VIRT 進程使用的虛擬內存總量,單位kb RES 進程使用的物理內存大小,單位kb SHR 共享內存大小,單位kb S 進程狀態 %CPU 上次更新到現在的CPU時間占用百分比 %MEM 進程使用的物理內存百分比 TIME+ 進程使用的CPU時間總計,單位1/100秒 COMMAND 命令名/命令行
2.5 TOP 常用命令
命令解釋 P 根據CPU使用百分比大小進行排序 M 據駐留內存大小進行排序 N 根據啟動時間進行排序 c 切換顯示命令名稱和完整命令行 h 可以獲得 top程序的在線幫助信息 k 根據提示輸入指定進程的 PID 號并按 Enter 鍵終止對應的進程 q 退出 top 程序 (數字)1 顯示CPU個數和狀態
3.查看進程信息–pgrep
當使用ps命令查詢某個進程的時候,往往需要結合grep命令對輸出結果進行過濾,但這樣使用非常不方便,而“pgrep”命令則正是用來查詢特定進程信息的專用工具 查詢進程名中包含“log”的進程及其PID號(若沒有“-l”則只輸出PID號)
[root@localhost ~]# pgrep -l "log"
288 xfs-log/sda2
477 xfs-log/sda1
481 xfs-log/sda5
595 systemd-logind
601 abrt-watch-log
628 abrt-watch-log
1028 rsyslogd
還可以結合“-U”選項查詢特定用戶的進程、“-t”選項查詢在特定終端運行的進程
##例如:查詢由用戶 teacher 在 tty1 終端上運行的進程及PID號
[root@localhost ~]# pgrep -l -U teacher -t tty2
4.查看進程樹–pstree
pstree命令可以輸出Linux系統中各進程的樹形結構,更加直觀地判斷出各進程之間的相互關系(如父、子進程) pstree命令默認情況下只顯示各進程的名稱,結合“-p”選項使用時可以同時列出對應的PID號 結合“-u”選項可以列出對應的用戶號 結合“-a”選項可以列出完整的命令信息 執行“pstree -aup”命令可以查看當前系統的進程樹,包括各進程對應的PID號、用戶名、完整命令等信息 也可以只查看屬于指定用戶的進程樹結構,只要指定用戶名作為參數即可
[root@localhost ~]# pstree -ap teacher
二、控制進程
1.進程的啟動方式
在Linux系統中,可以由用戶手工啟動或者按預定計劃調度啟動新的進程
1.1 手工啟動
根據該進程是否需要占用當前命令終端,手工啟動分為以下兩類 前臺啟動:用戶輸入命令,直接執行程序,但得等到該進程結束并退出才能繼續執行其他命令 后臺啟動:在命令行尾加入“&”符號;無需等待,適用于等待時間較長的操作
[root@localhost ~]# cp /dev/cdrom mycd.iso &
[1] 4226
##輸出信息包括后臺任務序號和PID號
1.2 調動啟用進程
在服務器維護工作中,經常需要執行一些比較費時而且較占用資源的任務(如數據備份),這些任務更適合在相對空閑的時候(如半夜)進行 但這樣需要用戶進行事前調度安排并指定任務運行的時間 調度啟動的計劃任務進程均在后臺運行,不占用用戶的命令終端 使用“at”命令,設置一次性計劃任務(如24:00分時重啟網絡服務) 使用crontab命令,設置周期性計劃任務(如每周五24:00時備份數據庫)
2.進程的前后臺調度
2.1 掛起當前進程
Ctrl+Z(組合鍵) 將當前進程掛起,即調入后臺并停止執行
[root@localhost ~]# jobs -l
[1]+ 5449 停止 vim /etc/sysconfig/network-scripts/ifcfg-ens33
2.2 查看后臺的進程
jobs 查看當前終端中在后臺運行的進程任務;結合“-l”選項可以同時顯示出該進程的PID號
[root@localhost ~]# jobs -l
[1]+ 5449 停止 vim /etc/sysconfig/network-scripts/ifcfg-ens33
2.3 將后臺的進程恢復運行
bg:將后臺暫停執行的任務恢復運行并繼續在后臺執行 fg:將后臺暫停執行的任務恢復運行并恢復到前臺運作 除非后臺中的任務只有一個,否則bg和fg命令都需要指定后臺進程的任務編號作為參數 例如:“fg 1(任務編號)”
3.終止進程執行
當用戶在前臺執行某個進程時,可以用Ctrl+C組合鍵強制中斷當前正在執行的命令
3.1 kill
kill用于終止指定PID號的進程,需要使用進程的PID號作為參數
[root@localhost ~]# pgrep -l "sshd" ##查詢目標進程PID號
1026 sshd
1798 sshd
[root@localhost ~]# kill 1026 ##終止指定PID的進程
[root@localhost ~]# pgrep -l "sshd"
1798 sshd ##再查詢時,發現1026沒有了,進程已成功終止
若該進程不響應終止信號,則結合“-9”選項可以強制終止 強制終止可能導致數據丟失,慎用
[root@localhost ~]# vim tmpfile ##打開vim并掛起以作測試[1]+ 已停止 vim tmpfile
[root@localhost ~]# jobs -l ##查詢目標進程PID號
[1]+ 2028 停止 vim tmpfile
[root@localhost ~]# kill 2028 ##嘗試直接終止進程
[root@localhost ~]# jobs -l ##查詢后發現并未退出
[1]+ 2028 停止 vim tmpfile
[root@localhost ~]# kill -9 2028 ##結合“-9”選項試試,強制終止目標進程
[root@localhost ~]# jobs -l ##沒了,成功
[1]+ 2028 已殺死 vim tmpfile
3.2 killall
用于結束系統中多個相關名稱的進程 也可以結合“-9”選項 例:執行“killall -9 vim”命令可將所有名為vim的進程全部強行終止
[root@localhost ~]# vim testfile1[1]+ 已停止 vim testfile1
[root@localhost ~]# vim testfile2[2]+ 已停止 vim testfile2
[root@localhost ~]# vim testfile3[3]+ 已停止 vim testfile3
[root@localhost ~]# jobs -l
[1] 2130 停止 vim testfile1
[2]- 2131 停止 vim testfile2
[3]+ 2132 停止 vim testfile3
[root@localhost ~]# killall -9 vim
[1] 已殺死 vim testfile1
[2]- 已殺死 vim testfile2
[3]+ 已殺死 vim testfile3
3.3 pkill
根據進程的名稱、運行該進程的用戶、進程所在的終端等多種屬性終止特定的進程 與“pgrep”命令選項類似,如“-U(指定用戶名)”、“-t(指定終端)”
三、一次性計劃任務–at
設置一次性計劃時,在at命令中依次指定計劃執行任務的時間、日期作為參數 確認后進入帶“at>”提示符的任務編輯器界面,每行設置一條執行命令,可以依次設置多條語句,最后按Ctrl+D組合鍵提交任務 注:計劃執行任務的時間、日期必須安排在當前系統時間之后 對應條件:對應系統服務為atd,必須已經運行 示例:
##設置在當天的20:00時關機
[root@localhost ~]# at 20:00
at> init 0<EOT> ##Ctrl+D組合鍵提交任務(按2次)
job 7 at Tue Dec 1 20:00:00 2020
“atq”命令可以進行查詢,已執行過的不會再出現在列表中
[root@localhost ~]# atq
7 Tue Dec 1 20:00:00 2020 a root
[root@localhost ~]# atrm 7
[root@localhost ~]# atq
[root@localhost ~]#
四、計劃任務管理–crontab
使用crontab命令設置的計劃任務可以按預設的周期重復執行,可以大大減輕設置重復性系統管理任務的操作 由軟件包cronie提供crontab工具、系統服務crond和配置文件/etc/crontab 前提條件:對應的系統服務crond必須已經運行
1.配置文件和目錄
crond通過多個目錄和文件設置計劃任務,不同類型的任務由不同的配置文件來設置
1.1 系統任務配置文件,位于文件:/etc/crontab
設置的是維護Linux系統所需的任務,由Linux系統及相關程序在安裝時自動設置,不建議用戶修改
1.2 系統默認的設置,位于目錄:/etc/cron.*/
軟件包crontabs安裝后,會在此目錄下升恒一些系統默認設置的計劃任務目錄,設置了系統每個小時、每一天做些什么工作
1.3 用戶定義的設置,位于文件:/var/spool/cron/
由用戶使用crontab命令設置的cron計劃會被保存在此目錄中(會在此目錄中生成一個與用戶名相同的文件)
2.管理crontab計劃任務
-u:指定管理的計劃任務屬于哪個用戶,默認時針對當前用戶(自己);一般只有root用戶有權限使用此選項 編輯計劃任務 crontab -e [-u 用戶名](沒有-u時默認對象是當前用戶) 查看計劃任務 crontab -l [-u 用戶名] 刪除計劃任務 crontab -r [-u 用戶名]
3.crontab 任務配置的格式
字段說明 分鐘 取值為從0到59之間的任意整數 小時 取值為從0到23之間的任意整數 日期 取值為從1到31之間的任意整數 月份 取值為從1到12之間的任意整數 星期 取值為從0到7之間的任意整數,0或7代表星期日 命令 要執行的命令或程序腳本
4.時間數值的特殊表示方法
“*”表示該范圍內的任意時間 “,”表示一個間隔內的多個不連續時間點 “-”表示一個連續的時間范圍 “/”表示間隔的時間頻率 示例:
0 17 * * 1-5 ##周一到周五每天17:00
30 8 * * 1,3,5 ##每周(一、三、五)的8:30
0 8-18/2 * * * ##8點到18點之間每2個小時
0 * */3 * * ##每3天
因為執行任務時不需要用戶登錄,建議都使用絕對路徑,避免因缺少執行路徑而無法執行命令的情況 在設置每分都執行的任務時,“分鐘”字段也應填寫一個具體的時間數值,而不是默認的“*”,否則將會每分鐘執行一次任務
5.其他
crontab命令集合“-l”選項可以查看當前用戶的計劃任務列表,對于root用戶來說,還可以結合“-u”選項查看其他用戶的計劃任務 需要刪除某一條計劃任務時,可以結合“-e”選項進行編輯 其他例子:
5 * * * * ls ##每個小時的第5分鐘執行一次ls命令
30 5 * * * ls ##每天的5:30執行ls命令
30 7 8 * * ls ##每個月8號的7:30執行ls命令
30 5 8 6 * ls ##每個6月8號的5:30執行ls命令
30 6 * * 0 ls ##每個周日的6:30執行ls命令
30 3 10,20 * * ls ##每個月10號和20號的3:30執行ls命令
25 8-11 * * * ls ##每天8點到11點的第25分時執行ls命令
*/15 * * * * ls ##每隔15分鐘執行一次ls命令
30 6 */10 * * ls ##月中的每隔10天的6:30時執行一次ls命令
總結
以上是生活随笔 為你收集整理的Linux--进程与任务管理(查看和控制进程及计划任务管理) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。