一,程序和進程概念
程序和進程的區別
- 程序是靜態概念,本身作爲一種軟件資源長期保存,而進程是程序的執行過程,他是動態概念,有自己的生命週期,是動態產生和消亡的
- 一個程序可以由多個進程共用,一個進程在活動中可以順序執行若干個程序
父進程和子進程
- 子進程是由一個進程所產生的進程,產生這個子進程的進程爲父進程
- Linux系統中,使用系統調用fork穿件進程。fork複製的內容包括父進程的數據和堆棧段以及父進程的進程環境
- 父進程終止,子進程也會終止
前臺進程和後臺進程
- 前臺進程
在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.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文件