Linux學習筆記(6)-進程管理

一,程序和進程概念

程序和進程的區別

  1. 程序是靜態概念,本身作爲一種軟件資源長期保存,而進程是程序的執行過程,他是動態概念,有自己的生命週期,是動態產生和消亡的
  2. 一個程序可以由多個進程共用,一個進程在活動中可以順序執行若干個程序

父進程和子進程

  1. 子進程是由一個進程所產生的進程,產生這個子進程的進程爲父進程
  2. Linux系統中,使用系統調用fork穿件進程。fork複製的內容包括父進程的數據和堆棧段以及父進程的進程環境
  3. 父進程終止,子進程也會終止

前臺進程和後臺進程

  • 前臺進程
    在Shell中輸入一個命令,創建一個子進程,運行命令,Shell就會等待命令完成,這個命令與Shell異步運行,即前臺運行,用戶在完成這個命令之前不能執行另一個命令
  • 後臺進程
    在Shell中輸入一個命令,如果後面加一個後臺運行符&,Shell創建子進程運行此命令,但不等待命令退出,直接返回給用戶提示符界面,這條命令就會與Shell同步運行,即後臺運行(後臺進程必須是非交互式的)
    例如:
    find / -name init > /test/init.find &
    (查找所有帶有init的放到/test/init.find文件中)

進程的狀態

  • 就緒狀態
    進程已經分配到資源,但因爲其他進程正在佔用CPU,所以暫時不能運行,處於等待分配CPU的狀態
  • 等待狀態
    因等待某種事件而暫時不能運行的狀態
  • 運行狀態
    進程分配到CPU,正在處理器上運行

狀態遷移的關係如下圖:
這裏寫圖片描述

二,進程管理的相關命令

查看用戶信息命令:w

使用後效果如下:
這裏寫圖片描述

(查看某個用戶信息:w 用戶名)

各項參數的含義:
- JCPU
以終端代號來區分,該終端所有相關進程執行時消耗的CPU時間
- PCPU
CPU執行程序所消耗的時間
- WHAT
用戶正在執行的操作
- load average
後面跟着三個數字,分別表明系統過去1,5,15分鐘內的平均負載程度(一般在0.8以下認爲系統負載不高)
- FROM
顯示用戶從從何處登陸系統,“:0”表示用戶該用戶從X Window下登陸的
- IDLE
用戶閒置時間,這是一個計時器,一旦用戶執行任何操作,該計時器都會被重置

查看系統中的進程命令:ps

常用選項:
- a:(all)顯示所有用戶進程
- u:顯示用戶名和啓動時間
- x:顯示沒有控制終端的進程
- e:(every)顯示所有進程,包括沒有控制終端的進程
- l:長格式顯示(顯示詳細信息)
- w:寬行顯示,可以使用多個w進行加寬顯示

當使用-l顯示詳細信息時,會有多個標識,如下所示:
這裏寫圖片描述
其中標識的含義:

  • PID:進程號
  • PPID:父進程的進程號
  • TTY:進程啓動的終端
  • STAT:進程當前狀態
    • S:休眠狀態
    • D:不可中斷的休眠狀態
    • R:運行狀態
    • Z:僵死狀態
    • T:停止
  • NI:進程優先級
  • TIME:進程自從啓動以來啓用CPU的總時間
  • COMMAND/CMD:進程的命令名
  • USER:用戶名
  • %CPU:佔用CPU時間和總時間的百分比
  • %MEM:佔用內存與系統內存總量的百分比

PS命令的使用實例

  • ps:產看隸屬於自己的進程
  • ps -u or -l:查看隸屬於自己進程的詳細信息
  • ps -le or -aux:查看所有用戶執行的進程的詳細信息
  • ps -aux –sort pid 按照進程執行的時間,PID,UID等對進程進行排序
  • ps -aux | grep Lily:查看Lily用戶執行的進程
  • ps -uU Lily:查看Lily用戶執行的進程
  • ps -le | grep init:查看指定進程信息

殺死進程命令:kill

  • 關閉進程:kill 進程號
    • kill有很多信號,可以使用kill -l全部列出來,如下兩個信號最常用
    • 強制關閉:kill -9 進程號(早期版本甚至可以強制關閉init進程)
    • 重啓進程:kill -1 進程號
  • 關閉圖形程序:xkill
  • 關閉所有進程:killall

改變進程優先級命令:nice和renice

  • nice
    • 啓動程序時指定程序運行的優先級
    • 格式: nice -n command
    • 例如: nice -5 someprogram
    • 註釋: 優先級(n)的範圍(-20, 19),值越小,優先級越大
  • renice

    • 改變一個正在運行的進程的優先級
    • 格式: renice n pid
    • 例如: renice -5 777

    具體的例子:
    正常啓動httpd,其優先級爲0,如下圖:
    這裏寫圖片描述
    關閉httpd,使用nice命令打開,則優先級爲-5,如圖
    這裏寫圖片描述
    再用renice命令改變優先級爲-10,如下圖
    這裏寫圖片描述

使進程在用戶退出後仍然執行的命令 : nohup

  • 使用該命令讓用戶退出登錄後仍然執行(區別於後臺運行符&), nohup默認將執行後的數據信息和錯誤信息存放在nohup.out文件中
  • 使用格式:
    • nohup program &
  • 例子:
    • nohup find / -name init* > /root/find.out &

進程的中止(掛起)和終止操作

掛起: Ctrl + Z
終止: Ctrl + C

查看被掛起的進程命令: jobs
直接輸入jobs就行

進程狀態顯示命令: top

  • 顯示進程狀態,5秒更新一次,比ps好用…
    效果如下圖:
    這裏寫圖片描述

  • 常用選項(輸入top之後,在top顯示出來的界面輸入d,q等命令)

    • d : 改變刷新時間
    • q : 退出
    • c : 顯示整個命令,而不是僅僅顯示命令名(可以查看具體在做什麼操作)
    • u : 查看某個用戶的進程信息
    • h : 查看幫助

三,計劃任務

計劃任務通常可以分爲一次性計劃任務和週期性計劃任務

一次性計劃任務

在某個時刻執行一次

at命令

功能:安排一個或多個命令(腳本)在指定時間運行一次

使用格式:

at 時間

例如:
at now +1 minutes
按下回車後, 進入at的交互模式,可以輸入想要執行的命令
想要結束時,可以按下Ctrl + D結束at
這樣, 輸入的命令會在一分鐘後執行
(把/下的所有文件寫入/note中)
at命令使用實例

使用at執行一個腳本(多個命令):

比如要執行一個腳本at.script
命令使用格式如下:
at -f at.script 9:00 today
或者
at < at.script 9:00 today

at命令的時間格式:

  • 絕對計時方法:

    • midnight noon teatime
    • hh:mm [today]
    • hh:mm tomorrow
    • hh:mm 星期
    • hh:mm MM/DD/YY
  • 相對計時方法:

    • now + n minutes
    • now + n hours
    • now + n days
  • 例子
    假如現在是15年8月30日下午14:30,如果想指定15:30時執行計劃任務

    • at 5:30pm
    • at 17:30
    • at 17:30 today
    • at now + 3 hours
    • at now + 180 minutes
    • at 17:30 8/30/15

查看at的計劃任務:

atq或者at -l

[root@localhost /]#atq
6 2015-08-30 16:09 a root

其中a表示active激活狀態

另外, at在缺省狀態下, 會把計劃任務放在/var/spool/at/文件夾下

刪除at的計劃任務:

如果要刪除剛纔的計劃任務,可以使用at -d 6
刪除剛纔那個序號爲6的計劃任務

at的配置文件

限制哪些用戶可以使用at命令

  • /etc/at.allow
  • /etc/at.deny

如果at.allow文件存在,那麼只有這個文件中的用戶才能使用at命令
如果at.allow文件不存在,則檢查at.deny是否存在,如果存在,則此文件中列出的用戶都不能使用at,如果兩個文件都不存在,那只有root可以使用at命令.
如果兩個文件都存在且都爲空,則所有用戶都能使用at

batch命令

使用方法和格式和at完全一樣
唯一的不同點:
使用batch的計劃任務在指定時間到了後, 會檢查當前系統負載, 在負載較低(低於0.8)的時候執行

週期性計劃任務

crontab命令格式

使用格式:
crontab -l :顯示當前的crontab
crontab -r :顯示當前的crontab
crontab -e :使用編輯器編輯當前的crontab文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章