Linux進(jìn)程管理與計(jì)劃任務(wù)詳解
一、程序與進(jìn)程的概念區(qū)分
- 程序:存儲在硬盤等外部存儲介質(zhì)中的可執(zhí)行機(jī)器代碼及數(shù)據(jù)的靜態(tài)集合,是指令的靜態(tài)形式。
- 進(jìn)程:程序被加載到內(nèi)存中運(yùn)行時,在 CPU 和內(nèi)存中處于動態(tài)執(zhí)行狀態(tài)的實(shí)例,是指令的動態(tài)執(zhí)行過程。
- 關(guān)系:一個程序啟動后可創(chuàng)建一個或多個進(jìn)程(例如瀏覽器程序可打開多個標(biāo)簽頁,每個標(biāo)簽頁對應(yīng)一個進(jìn)程)。
二、進(jìn)程查看工具及參數(shù)解析
1.ps:查看靜態(tài)進(jìn)程信息
用于顯示系統(tǒng)在某一時刻的進(jìn)程快照,常用參數(shù)組合及功能如下:
| 參數(shù) | 含義 |
|---|---|
| -a | 顯示當(dāng)前終端下所有用戶的進(jìn)程,與-x結(jié)合可顯示系統(tǒng)所有進(jìn)程 |
| -u | 以用戶為中心的格式輸出進(jìn)程信息(含用戶、CPU、內(nèi)存占用等) |
| -x | 顯示當(dāng)前用戶所有終端的進(jìn)程(包括無終端關(guān)聯(lián)的進(jìn)程) |
| -e | 顯示系統(tǒng)內(nèi)所有進(jìn)程 |
| -l | 以長格式顯示進(jìn)程信息(含優(yōu)先級、狀態(tài)等詳細(xì)字段) |
| -f | 以完整格式顯示進(jìn)程信息(含父進(jìn)程 ID、啟動時間等) |
輸出字段說明:
USER:啟動進(jìn)程的用戶賬號PID:進(jìn)程的唯一數(shù)字 ID(系統(tǒng)內(nèi)唯一)%CPU:進(jìn)程占用 CPU 的百分比%MEM:進(jìn)程占用內(nèi)存的百分比VSZ:進(jìn)程占用的虛擬內(nèi)存大小(單位:KB)RSS:進(jìn)程占用的物理內(nèi)存大?。▎挝唬篕B)TTY:進(jìn)程運(yùn)行的終端(?表示無需終端或終端未知)STAT:進(jìn)程狀態(tài)(R運(yùn)行、S休眠、Z僵死、<高優(yōu)先級、N低優(yōu)先級等)START:進(jìn)程啟動時間TIME:進(jìn)程累計(jì)占用 CPU 的時間COMMAND:啟動進(jìn)程的命令名稱
2.top:實(shí)時監(jiān)控動態(tài)進(jìn)程
實(shí)時刷新顯示進(jìn)程狀態(tài)(默認(rèn) 3 秒刷新一次,按q退出),核心信息包括:
(1)系統(tǒng)整體狀態(tài)
load average:1 分鐘、5 分鐘、15 分鐘內(nèi)的 CPU 平均負(fù)載(若 5/15 分鐘負(fù)載超過 CPU 核心數(shù)的 2 倍,視為高負(fù)載)Tasks:進(jìn)程總數(shù)及狀態(tài)分布(running運(yùn)行中、sleeping休眠、stopped停止、zombie僵死)%cpu:CPU 占用細(xì)分(us用戶進(jìn)程、sy系統(tǒng)進(jìn)程、ni優(yōu)先級調(diào)整、id空閑、waI/O 等待等)Mem:物理內(nèi)存使用情況Swap:虛擬內(nèi)存(交換空間)使用情況
(2)進(jìn)程列表字段
PR:進(jìn)程優(yōu)先級(數(shù)值越小優(yōu)先級越高)NI:進(jìn)程 nice 值(范圍 - 20~19,值越小優(yōu)先級越高)VIRT:進(jìn)程占用的虛擬內(nèi)存總量(KB)RES:進(jìn)程占用的物理內(nèi)存總量(KB)SHR:進(jìn)程與其他進(jìn)程共享的內(nèi)存總量(KB)S:進(jìn)程狀態(tài)(D不可中斷休眠、R運(yùn)行、S休眠、T停止、Z僵死)TIME+:進(jìn)程啟動至今的 CPU 占用時間(精確到 0.01 秒)
3. 其他進(jìn)程查看工具
pgrep -l 進(jìn)程名:查詢指定進(jìn)程的名稱及 PID(如pgrep -l systemd)
pstree:以樹形結(jié)構(gòu)展示進(jìn)程間的父子關(guān)系
-p:同時顯示進(jìn)程 PID-u:顯示進(jìn)程所屬用戶-a:顯示完整命令行
三、進(jìn)程控制操作
1. 進(jìn)程的啟動方式
- 前臺啟動:直接執(zhí)行命令(如
ls),命令行被占用直至進(jìn)程結(jié)束 - 后臺啟動:命令后加
&(如route &),進(jìn)程在后臺運(yùn)行,不阻塞當(dāng)前終端
2. 進(jìn)程的掛起與恢復(fù)
- 掛起進(jìn)程:前臺進(jìn)程運(yùn)行時按
Ctrl+Z,進(jìn)程被暫停并轉(zhuǎn)入后臺 - 查看后臺進(jìn)程:
jobs -l(顯示進(jìn)程 ID、狀態(tài)及命令)
恢復(fù)后臺進(jìn)程:
bg 進(jìn)程ID:后臺恢復(fù)運(yùn)行(如bg 1)fg 進(jìn)程ID:前臺恢復(fù)運(yùn)行(如fg 1)
3. 進(jìn)程的終止
kill 進(jìn)程ID:正常終止指定 PID 的進(jìn)程(如kill 1234)kill -9 進(jìn)程ID:強(qiáng)制終止進(jìn)程(用于常規(guī)kill無效時,如kill -9 1234)killall 進(jìn)程名:終止所有同名進(jìn)程(如killall firefox),-9參數(shù)可強(qiáng)制終止
pstree:按條件終止進(jìn)程
-U 用戶名:終止指定用戶的進(jìn)程(如pkill -U natasha)-t 終端:終止指定終端的進(jìn)程(如pkill -t pts/0)
四、計(jì)劃任務(wù)配置
1.at:一次性計(jì)劃任務(wù)
用于配置在指定時間執(zhí)行一次的任務(wù):
- 創(chuàng)建任務(wù):
at 23:30 2024-12-31 # 指定執(zhí)行時間 at> ls / > /tmp/result.txt # 輸入任務(wù)命令 按Ctrl+D保存退出
管理任務(wù):
atq:查看所有at任務(wù)at -c 任務(wù)號:查看任務(wù)詳情atrm 任務(wù)號:刪除任務(wù)
2.crontab:周期性計(jì)劃任務(wù)
用于配置重復(fù)執(zhí)行的任務(wù),核心文件包括/etc/crontab(系統(tǒng)任務(wù))和/var/spool/cron/(用戶任務(wù))。
(1)時間格式
遵循 “分 時 日 月 周” 的格式,支持特殊符號:
*:匹配所有值(如 “分” 位為*表示每分鐘)*/n:每隔 n 單位(如*/10表示每 10 分鐘)a-b:范圍(如8-17表示 8 到 17 點(diǎn))a,b:多個值(如1,3,5表示周一、三、五)
(2)常用命令
crontab -e:編輯當(dāng)前用戶的任務(wù)crontab -u 用戶名 -e:編輯指定用戶的任務(wù)crontab -l:查看任務(wù)列表crontab -r:刪除所有任務(wù)
例:
每月 1-5 日 14:00-17:00,每 10 分鐘執(zhí)行/bin/echo “I Love Galaxy”:
crontab -e # 加入:*/10 14-17 1-5 * * /bin/echo "I Love Galaxy" systemctl restart crond
周一至周五 8:00-21:00,每 2 分鐘將當(dāng)前時間追加到/home/galaxy/my_first_cron_job.txt:
crontab -e # 加入:*/2 8-21 * * 1-5 date >> /home/galaxy/my_first_cron_job.txt systemctl restart crond
總結(jié)
進(jìn)程管理通過ps、top等工具監(jiān)控系統(tǒng)運(yùn)行狀態(tài),結(jié)合kill、bg等命令控制進(jìn)程生命周期;計(jì)劃任務(wù)通過at和crontab實(shí)現(xiàn)任務(wù)的自動執(zhí)行,是系統(tǒng)自動化運(yùn)維的核心工具。掌握這些操作可有效提升系統(tǒng)管理效率。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決linux環(huán)境下時區(qū)無法設(shè)置的問題
在本篇文章里小編給大家整理的是關(guān)于解決linux環(huán)境下時區(qū)無法設(shè)置的問題的方法,需要的朋友們學(xué)習(xí)下。2020-01-01
簡單了解linux終端創(chuàng)建文件的2種常用方法
這篇文章主要介紹了簡單了解linux終端創(chuàng)建文件的2種常用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
jmeter在linux系統(tǒng)下運(yùn)行及本地內(nèi)存調(diào)優(yōu)的方法詳解
這篇文章主要介紹了jmeter在linux系統(tǒng)下運(yùn)行及本地內(nèi)存調(diào)優(yōu)的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
PHP程序員玩轉(zhuǎn)Linux系列 自動備份與SVN
這篇文章主要為大家詳細(xì)介紹了PHP程序員玩轉(zhuǎn)Linux系列文章,學(xué)習(xí)自動備份與SVN教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
Linux學(xué)習(xí)第一天——ssh登錄和軟件安裝詳解
這篇文章主要介紹了Linux學(xué)習(xí)第一天——ssh登錄和軟件安裝詳解 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12
詳解為新版Apache服務(wù)器開啟HTTP/2支持的方法
這篇文章主要介紹了在Apache服務(wù)器中開啟HTTP/2的方法,HTTP/2被稱為未來的新HTTP協(xié)議,需要的朋友可以參考下2015-12-12

