1. 程式人生 > >Linux學習筆記之進程管理

Linux學習筆記之進程管理

crontab 重要 執行者 變量 user 概念 進程管理 ont 任務

一、進程基礎

  • 當輸入一個命令時,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學習筆記之進程管理