Linux學習筆記之進程管理
一、進程基礎
- 當輸入一個命令時,shell會同時啟動一個進程,這種任務與進程分離的方式是 Linux 系統上重要的概念,而每個執行的任務都稱為進程,在每個進程啟動時,系統都會給它指定一個唯一的ID,稱為進程ID
- 對進程進行管理必須以進程ID作為對象而非進程名稱
- 每個進程都可能以兩種方式存在:前臺和後臺,前臺進程就是用戶當前屏幕上操作的進程,而後臺進程則是實際上在操作但從屏幕上無法看到的進程,一般來說,系統的服務都是以後臺進程的方式存在,而且都會常駐系統中直到關機才結束,這類服務也稱為 Deamon
二、顯示進程
可以使用 ps 命令(Process Status)顯示當前運行的進程,顯示的內容如下:
- PID(Process ID):進程標誌
- TTY(Teletypewritter):登陸終端的編號
- TIME:此進程消耗的CPU時間
- CMD:正在執行的命令或進程名稱
添加 -l 參數(Long Format)可以顯示更詳細的信息,顯示的內容如下:
- F(Flag):進程狀態標誌
- S(Status):進程狀態
- UID(User ID):進程執行者的ID
- PPID(Parent Process ID):父進程的ID
- PRI(Priority):進程執行的優先級
- NI(Nice):優先級的 Nice 值,負值表示優先級高
- SZ(Size):進程占用的內存大小,單位為 KB
- WCHAN(Waiting Channel):進程等待時的地址
添加 -u 參數(User Format)也可以顯示更詳細的信息,顯示的內容如下:
USER:進程的執行者
- %CPU:CPU使用率
- %MEM:內存使用率
- VSZ:占用虛擬內存的大小
- RSS:占用物理內存的大小
START:進程開始的時間
三、刪除進程
可以先使用 ps 命令查看進程ID,再使用 kill 進程ID
命令終止指定進程
若無法直接使用上述命令刪除進程,
- 可以加上 -9 參數,代表發出 SIGKILL 信號
- 可以加上 -15 參數,代表發出 SIGTERM 信號
但是要註意的是,通常極難刪除的進程大多與系統運行相關聯,因此最好不要養成直接使用 -9 和 -15 參數的習慣
四、進程優先級
每個進程執行時都會被賦予使用 CPU 的優先等級,等級越高,系統提供的 CPU使用時間 就會越多,一般地,進程執行時的優先等級範圍是 -20~19,其中-20最高,19最低,優先級 -20 ~ -1 只有管理員可以設置,可以使用以下兩個命令設置進程優先等級
- nice 命令:設置進程執行的優先級,如果執行進程時沒有使用nice,則默認為0;如果使用nice而沒有指定優先級,則默認為10,語法如下:
nice -優先級 命令
- renice 命令:重新調整進程執行時的優先級,語法如下:
renice -優先級 進程ID
五、動態顯示進程
可以使用 top 命令動態顯示進程狀態,在 top 命令執行過程中可以結合使用以下指令完成特定的進程操作
- P:改變進程的排列順序,按 CPU使用時間 排序
- M:改變進程的排列順序,按 內存使用量 排序
- J:改變進程的排列順序,按 執行時間 排序
- u:監視指定用戶產生的進程
- k:刪除指定 PID 的進程
六、設置任務調度
任務自動調度是設置系統在某個時間段執行特定的命令或進程,也就是周期性執行任務,Linux 系統中常以 cron 工具進行調度工作
1. 文件調度規則
執行 crond 進行任務調度前,須寫一個提供 crond 執行時所需信息的文件,文件中每行需要包含6個字段,每個字段間要以空白隔開,六個字段列舉如下:
字段名稱 | 說明 | 範圍 |
---|---|---|
分鐘 | 每小時的第幾分鐘執行 | 0~59 |
小時 | 每天的第幾小時執行 | 0~23 |
日期 | 每月的第幾天執行 | 1~31 |
月份 | 每年的第幾月執行 | 1~12 |
星期 | 每周的第幾天執行 | 0~6 |
命令名稱 | 命令名稱及參數 | 無 |
說明:
- 除了最後一個字段為必填項之外,其余字段可視需求決定
- 不指定的字段輸入 * 占位,* 表示全部的意思
- 可以使用 - 表示範圍,如2-5
- 可以使用 , 表示分隔,如2,3,4,5
- 如果在執行命令後沒有使用輸出重定向,則系統會將執行結果以電子郵件的方式傳送給執行此進程的用戶
2. 設置任務調度
- 設置系統調度任務:有關 Ubuntu 系統調度任務的記錄在 /etc/crontab 文件中,部分環境變量也會定義在 /etc/anacrontab 文件中,如 SHELL、PATH等
- 設置個人調度任務:
可以使用 vi 編輯器編寫任務調度,編寫完成並保存文件後需要通過 crontab 文件名
啟動任務調度
也可以使用 crontab-e 命令進行編輯,編寫完成後默認保存在 /tmp 目錄下,接下來系統會將用戶的設置內容寫入 /var/spool/cron 目錄中以每個用戶名稱命名的文件,同時自動檢查並啟動任務調度
3. 其他命令
- crontab -l:查看當前用戶的調度任務(顯示 /var/spool/cron 目錄中以每個用戶名稱命名的文件的內容)
- crontab -r:刪除所有調度任務
4. cron 訪問管理
當用戶新增或刪除 cron 任務時,系統會尋找 /etc/cron.allow 文件,若文件存在,則包含在其中的用戶允許使用 cron,若 /etc/cron.allow 文件不存在,則系統會尋找 /etc/cron.deny 文件,若文件存在,則包含在其中的用戶會被禁用 cron,但唯一例外的是root(無論是否在文件中均可使用 cron 服務)
註意在編輯 /etc/cron.allow 和 /etc/cron.deny 文件時,每行只能輸入一個用戶名稱,而且不能包含空格
Linux學習筆記之進程管理