Linux--进程与任务管理
文章目錄
- 前言
- 一、查看進程
- 1、查看進程信息——ps
- ①方法一——ps -aux
- ②方法一——ps -elf
- 2、查看進程信息——top
- ①系統任務(第一行)和進程(第二行)的信息
- ②CPU(第三行)、內存(第四行)的信息和交換空間(第五行)的相關信息
- ③ 進程信息區各列詳解
- ④ top常用命令
- 3、查看進程信息——pgrep
- 4、查看進程樹——pstree
- 二、控制進程
- 1、進程的啟動方式
- ①手工啟動
- ②調動啟用
- 2、進程的前后臺調度
- ①掛起當前進程
- ②查看后臺的進程
- ③將后臺的進程恢復運行
- 3、終止進程執行
- ①kill
- ②killall
- ③pkill
- 三、一次性計劃任務—at
- 四、周期性任務設置—crontab
- 1、配置文件和目錄
- ①系統任務配置文件,位于文件:/etc/crontab
- ②系統默認的設置,位于目錄:/etc/cron.*/
- ③用戶定義的設置,位于文件:/var/spool/cron/
- 2、管理crontab計劃任務
- 3、crontab 任務配置的格式
- 4、時間數值的特殊表示方法
- ①特殊表示方式及示例
- ②查看用戶的計劃任務表
- ③刪除用戶的計劃任務表
- 總結
前言
Linux進程管理是一項十分重要的工作,可以幫助我們更好的控制系統。進程是程序在計算機上的一次執行活動。當你運行一個程序,你就啟動了一個進程。本文介紹了常用進程操作命令以及管理
一、查看進程
-
程序:
-
保存在硬盤、光盤等介質中的可執行代碼和數據
-
靜態保存的代碼
-
-
進程:
- 在CPU及內存中運行的程序代碼
- 動態執行的代碼
- 父、子進程
- 每個程序可以創建一個或多個進程
線程和進程的區別:
做個簡單的比喻:進程=火車,線程=車廂
線程在進程下行進(單純的車廂無法運行),一個進程可以包含多個線程(一輛火車可以有多個車廂),多個線程可共享數據(車廂是互通的)
1、查看進程信息——ps
①方法一——ps -aux
- 查看靜態的進程統計信息:ps -aux
一般結合管道符號來用:ps -aux | grep httpd | wc -l
- a:顯示當前終端下的所有進程信息,包括其他用戶的進程,與“x”選項結合使用時將顯示系統中所有的進程信息
- u:使用以用戶為主的格式輸出進程信息
- x:顯示當前用戶在所有終端下的進程信息
- 將以簡單列表的形式顯示出進程信息
| USER | 進程的用戶 |
| PID | 進程的ID |
| %CPU | 進程占用的CPU百分比 |
| %MEN | 占用內存的百分比 |
| VSZ | 該進程使用的虛擬內存量(KB) |
| RSS | 該進程使用的物理內存量(KB) |
| TTY | 啟動該進程的終端名;若不是從終端啟動的進程則顯示為“?” |
| STAT | 該進程的狀態(D:不可中斷的休眠狀態:R:正在運行狀態;S:處于休眠狀態,可被喚醒;T:停止狀態,可能是在后臺暫停或進程處于跟蹤調試狀態: Z:僵尸進程,進程已經中止,但是部分程序還在內存當中) |
| START | 該進程被觸發啟動時間 |
| TIME | 該進程實際使用CPU運行的時間 |
| COMMAND | 進程的啟動命令 |
名詞解釋(僵尸進程):
已經結束了一個進程,但是它任然還占用著內存,也稱之為僵死
父進程退出,子進程沒有退出,那這些子進程就沒有父進程去管理它們,所以就成了僵尸進程
狀態后綴表示:
-D:不可被喚醒的睡眠狀態,通常用于 I/O 情況。
-R:該進程正在運行。
-S:該進程處于睡眠狀態,可被喚醒。
-T:停止狀態,可能是在后臺暫停或進程處于除錯狀態。
-W:內存交互狀態(從 2.6 內核開始無效)。
-X:死掉的進程(應該不會出現)。
-Z:僵尸進程。進程已經中止,但是部分程序還在內存當中。
-<:高優先級(以下狀態在 BSD 格式中出現)。
-N:低優先級。
-L:被鎖入內存。
-s:包含子進程。
-l:多線程(小寫 L)。
-+:位于后臺。
-C:進程占用CPU的百分比
- 示例1:查看進程狀態
ctrl+c :發送 SIGINT 信號,終止一個進程
ctrl+z :發送 SIGSTOP 信號,掛起一個進程。將作業放置到后臺(暫停)
ctrl+d :不是發送信號,而是表示一個特殊的二進制值,表示 EOF。代表輸入完成或者注銷
- 示例2:不可中斷狀態
②方法一——ps -elf
- e:顯示系統內的所有進程信息
- l:使用長格式顯示進程信息
- f:使用完整的格式顯示進程信息
- 將以長格式顯示系統中的進程信息,并且包含更豐富的內容
| 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)切換
2、查看進程信息——top
- 使用ps命令查看到的是一個靜態的進程信息,并不能連續地反饋當前進程的運行狀態
- 若希望以動態刷新的方式顯示各進程的狀態信息則使用top
- 默認情況下每三秒刷新一次,按 s 修改刷新時間,按空格 :立即刷新
①系統任務(第一行)和進程(第二行)的信息
| 18:55:08 | 系統時間 | Tasks | 總進程數 |
| up 2:07 | 系統已運行時間 | running | 正在運行的進程數 |
| 1 user | 當前登錄用戶數 | sleeping | 休眠的進程數 |
| load average:0.00,0.01,0.05 | 系統負載,即單位時間內系統處理的任務數,后面三個數值分別為1分鐘、5分鐘、15分鐘到現在的平均值 | stopped | 中止的進程數 |
| / | / | zombie | 僵死的進程數 |
②CPU(第三行)、內存(第四行)的信息和交換空間(第五行)的相關信息
| us | 用戶占用 | total | 總內存空間 | total | 總交換空間 |
| sy | 內核占用 | free | 空閑內存 | free | 空閑交換空間 |
| ni | 優先級調度占用 | used | 已用內存 | used | 已用交換空間 |
| id | 空閑CPU,要了解空閑的CPU百分比,主要看%id部分 | buff/cahe | 物理內存和交換內存的緩沖區總和 | avail Mem | 可用物理空間 |
| wa | I/O等待占用 | / | / | / | / |
| hi | 硬件中斷占用 | / | / | / | / |
| si | 軟件中斷占用 | / | / | / | / |
| st | 虛擬化占用 | / | / | / | / |
③ 進程信息區各列詳解
| PID | 進程id |
| USER | 進程所有者的用戶名 |
| PR | 優先級 |
| NI | 謙讓度值,負值表示高優先級,正值表示低優先級 |
| VIRT | 進程使用的虛擬內存總量,單位kb |
| RES | 進程使用的物理內存大小,單位kb |
| SHR | 共享內存大小,單位kb |
| S | 進程狀態 |
| %CPU | 上次更新到現在的CPU時間占用百分比 |
| %MEM | 進程使用的物理內存百分比 |
| TIME+ | 進程使用的CPU時間總計,單位1/100秒 |
| COMMAND | 命令名/命令行 |
④ top常用命令
| P | 根據CPU使用百分比大小進行排序 |
| M | 據駐留內存大小進行排序 |
| N | 根據啟動時間進行排序 |
| c | 切換顯示命令名稱和完整命令行 |
| h | 可以獲得 top程序的在線幫助信息 |
| k | 根據提示輸入指定進程的 PID 號并按 Enter 鍵終止對應的進程 |
| q | 退出 top 程序 |
| (數字)1 | 顯示CPU個數和狀態 |
若通過 top 排名工具發現某個進程 CPU 占用率非常高,需要終止該進程的運行,可以在 top 操作界面中按 k 鍵,然后在列表上方將會出現“PID to signal/kill [default pid = 3180]:” 的提示信息,根據提示輸入指定進程的 PID 號并按 Enter 鍵, 出現“Send pid 5597 signal [15/sigterm]”的二次確認的提示信息,然后按Enter 鍵確認即可終止對應的進程
3、查看進程信息——pgrep
| -U | 選項查詢特定用戶的進程 |
| -t | 選項查詢在特定終端運行的進程 |
- 示例1:查詢進程中包含‘log’的進程及PID號(若沒有“-l”則只輸出PID號)
- 示例2:查詢由用戶 teacher 在 tty1 終端上運行的進程及PID號
4、查看進程樹——pstree
- pstree命令可以輸出Linux系統中各進程的樹形結構,更加直觀地判斷出各進程之間的相互關系(如父、子進程)
| -u | 選項可以列出對應的用戶名 |
| -a | 選項可以列出完整的命令信息 |
- 示例1:
二、控制進程
1、進程的啟動方式
- 在Linux系統中,可以由用戶手工啟動或者按預定計劃調度啟動新的進程
①手工啟動
-
根據該進程是否需要占用當前命令終端,手工啟動分為以下兩類
- 前臺啟動:用戶輸入命令,直接執行程序,但得等到該進程結束并退出才能繼續執行其他命令
- 后臺啟動:在命令行尾加入“&”符號;無需等待,適用于等待時間較長的操作
-
示例:
②調動啟用
- 在服務器維護工作中,經常需要執行一些比較費時而且較占用資源的任務(如數據備份),這些任務更適合在相對空閑的時候(如半夜)進行,但這樣需要用戶進行事前調度安排并指定任務運行的時間
- 調度啟動的計劃任務進程均在后臺進行,不占用用戶的命令終端
- 使用”at“命令時,設置一次性計劃任務,使用”crontab"命令,設置周期性計劃任務
2、進程的前后臺調度
①掛起當前進程
當Linux操作系統中的命令正在前臺執行時(運行尚未結束),按Ctrl+Z組合鍵可以將當前進程掛起(調入后臺并停止執行),這種操作在需要暫停當前進程并進行其他操作時特別有用。例如,打包usr并且調入后臺 ,可以按 Ctrl+Z 組合鍵將該下載任務調入后臺并暫停執行—tar zcvf usr.tar.gz /usr
②查看后臺的進程
- jobs—查看當前終端中在后臺運行的進程任務,結合“-l”選項可以同時顯示該進程的PID號
③將后臺的進程恢復運行
- bg; 將后臺暫停執行的任務恢復運行并繼續在后臺執行
- fg:將后臺暫停執行的任務恢復運行并恢復至前臺運行
- 除非后臺中的任務只有一個,否則bg和fg命令都需要指定后臺進程的任務編號作為參數
- 例如:“fg 1(任務編號)”
3、終止進程執行
- 當用戶在前臺執行某個進程時,可以用Ctrl+C組合鍵強制中斷當前正在執行的命令
- 當按 Ctrl+C 組合鍵無法終止程序或者需要結束在其他終端或后臺運行的進程時, 可以使用專用的進程終止工具 kill、killall 和 pkill
①kill
- kill用于終止指定PID號的進程,需要使用進程的PID號作為參數
- 若該進程不響應終止信號,則結合“-9”選項可以強制終止
②killall
-
使用 killall 命令可以通過進程名稱來終止進程,當需要結束系統中多個相同名稱的進程時,使用 killall 命令將更加方便,效率更高。killall 命令同樣也有“-9”選項。
-
例如,執行如下的“killall -9 vim”命令可將所有名為 vim 的進程都強行終止
——通過進程名終止多個進程
③pkill
- 根據進程的名稱、運行該進程的用戶、進程所在的終端等多種屬性終止特定的進程
- 與“pgrep”命令選項類似,如“-U(指定用戶名)”、“-t(指定終端)”
三、一次性計劃任務—at
-
在 Linux 操作系統中,除了用戶即時執行的命令操作以外,還可以配置在指定的時間、指定的日期執行預先計劃的系統管理任務(如定期備份、定期采集監測數據)。CentOS 系統中默認已安裝了 at、cronie 軟件包
-
設置一次性計劃時,在at命令中依次指定計劃執行任務的時間、日期作為參數
-
確認后進入帶“at>”提示符的任務編輯器界面,每行設置一條執行命令,可以依次設置多條語句,最后按Ctrl+D組合鍵提交任務
-
注:計劃執行任務的時間、日期必須安排在當前系統時間之后
-
對應條件:對應系統服務為atd,必須已經運行
- “atq”命令可以進行查詢,對于已經設置但還未執行(未到時間點)的計劃任務,但已執行過的不會再出現在列表中
- "atrm"命令可以刪除指定編號的at任務
四、周期性任務設置—crontab
-
使用crontab命令設置的計劃任務可以按預設的周期重復執行,可以大大減輕設置重復性系統管理任務的操作
-
由軟件包cronie提供crontab工具、系統服務crond和配置文件/etc/crontab
-
前提條件:對應的系統服務crond必須已經運行
1、配置文件和目錄
- crond 通過多個目錄和文件設置計劃任務,不同類型的任務由不同的配置文件來設置
①系統任務配置文件,位于文件:/etc/crontab
- 設置的是維護Linux系統所需的任務,由Linux系統及相關程序在安裝時自動設置,不建議用戶修改
②系統默認的設置,位于目錄:/etc/cron.*/
- 軟件包crontabs安裝后,會在此目錄下升恒一些系統默認設置的計劃任務目錄,設置了系統每個小時、每一天做些什么工作
③用戶定義的設置,位于文件:/var/spool/cron/
- 由用戶使用crontab命令設置的cron計劃會被保存在此目錄中(會在此目錄中生成一個與用戶名相同的文件)
crond 守護進程會自動檢查/etc/crontab 文件、/etc/cron.d/目錄及 /var/spool/cron/目錄中的改變,如果發現有配置更改,它們就會被載入內存,所以當某個 crontab 文件改變后并不需要重新啟動 crond 守護進程就可以使設置生效
2、管理crontab計劃任務
| -l | 列出當前用戶下的cron的詳細內容 |
| -u zx -l | 列出zx用戶下的cron的詳細內容 |
| -r | 刪除所有用戶的cron內容,普通用戶執行,只刪除自己的cron內容 |
| -r -u zx | 刪除zx用戶的cron內容 |
| -e | 編輯cron服務 |
3、crontab 任務配置的格式
| 分鐘 | 取值為從0到59之間的任意整數 |
| 小時 | 取值為從0到23之間的任意整數 |
| 日期 | 取值為從1到31之間的任意整數 |
| 月份 | 取值為從1到12之間的任意整數 |
| 星期 | 取值為從0到7之間的任意整數,0或7代表星期日 |
| 命令 | 要執行的命令或程序腳本 |
背記口訣(牢記):分 時 日 月 周
4、時間數值的特殊表示方法
①特殊表示方式及示例
-
“*”表示該范圍內的任意時間
-
“,”表示一個間隔內的多個不連續時間點
-
“-”表示一個連續的時間范圍
-
“/”表示間隔的時間頻率
示例1:
若要按固定的周期重復完成一些系統管理任務,任務內容如下:①每天早上 7:50
自動開啟httpd 服務,22:50 關閉 httpd 服務;②每隔五天清空一次 FTP 服務器公共目錄/var/ftp/pub 中的數據;③每周六的 7:30 重新啟動系統中的 httpd 服務;④每周一、周三、周五的下午 17:30,使用 tar 命令自動備份/etc/httpd 目錄,則可由 root 用戶通過 crontab 設置以下計劃任務
-
因為執行任務時不需要用戶登錄,建議都使用絕對路徑,避免因缺少執行路徑而無法執行命令的情況
-
在設置每分都執行的任務時,“分鐘”字段也應填寫一個具體的時間數值,而不是默認的“*”,否則將會每分鐘執行一次任務
示例2:
普通用戶執行“crontab -e”命令時,可以設置自己的計劃任務(需要注意命令的執行權限)。
例如,用戶xjj 設置一條計劃任務:在每周五晚上的 23:55 將/etc/passwd 文件的內容復制到宿主目錄中,保存為 123.txt 文件,具體操作如下:
②查看用戶的計劃任務表
crontab 命令結合“-l”選項可以查看當前用戶的計劃任務列表,對于 root 用戶來說,還可以結合“-u”選項查看其他用戶的計劃任務,具體操作如下:
[root@localhost ~]# crontab –l #查看用戶root 自己的計劃任務 50 7 * * * /usr/bin/systemctl start httpd.service 50 22 * * * /usr/bin/systemctl stop httpd.servic 0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/* 30 7 * * 6 /usr/bin/systemctl httpd restart 30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/ [root@localhost ~]# crontab -l -u xjj #查看用戶xjj的計劃任務 55 23 * * 7 /usr/bin/cp /etc/passwd /home/xjj/123.txt [root@localhost ~]# ll /var/spool/cron/xjj -rw-------. 1 root root 57 May 7 11:10 /var/spool/cron/xjj③刪除用戶的計劃任務表
- 當只需要刪除某一條計劃任務時,可以通過“crontab -e”命令進行編輯;而若要清空某個用戶的所有計劃任務,可以執行“crontab -r”命令
總結
在生產環境中設置相應的計劃任務可以按預設的周期重復執行,可以大大減輕設置重復性系統管理任務的操作
總結
以上是生活随笔為你收集整理的Linux--进程与任务管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TabLayout+ViewPager实
- 下一篇: oracle文章收藏