程序和進程的關(guān)系

程序:保存在硬盤,光盤等介質(zhì)中可執(zhí)行代碼和數(shù)據(jù),文件中靜態(tài)保存的代碼。

進程

在cpu及內(nèi)存中運行的程序代碼,動態(tài)執(zhí)行的代碼。進程可以看成程序執(zhí)行的一個實例。進程是系統(tǒng)資源分配的獨立實體,每個進程都擁有獨立的地址空間。一個進程無法訪問另一個進程的變量和數(shù)據(jù)結(jié)構(gòu),如果想讓一個進程訪問另一個進程的資源,需要使用進程間通信,比如管道,文件,套接字等。
父、子進程:每個程序可以創(chuàng)建一個或多個進程,


ps命令:查看進程信息

查看靜態(tài)的進程統(tǒng)計信息
命令格式:ps aux
a: 顯示終端上的所有進程,包括其他用戶的進程
u: 表示列出進程的用戶。
x: 顯示所有終端的進程。
統(tǒng)計進程數(shù)量:ps aux | wc -l



各列的解釋
user:進程的用戶、PID:進程的ID、%CPU:進程占用的CPU百分比、%MEN:占用內(nèi)存的百分比、VSZ:該進程使用的虛擬內(nèi)存量(KB)、RSS:該進程占用的物理內(nèi)存量(KB)。
TTY:啟動進程的終端名,不是從終端啟動的進程顯示為“?”。CentOS中TTY1代表桌面終端,TTY2-6代表是文字界面的終端。用Ctrl+Alt+F(2-6)切換到字符界面的終端,桌面圖形終端ctrl+alt+F1切換回來。用who命令來查看登錄的用戶信息(pts表示遠程登錄,tty表示服務(wù)器自帶的終端)。
STAT:該進程的狀態(tài)(D:不可中斷的休眠狀態(tài);R:正在運行狀態(tài);S:處于休眠狀態(tài),可被喚醒;T:停止狀態(tài),可能是在后臺暫停或進程處于跟蹤調(diào)試狀態(tài)。
Z :僵尸進程,進程已經(jīng)中止,但是部分程序還在內(nèi)存中)、START:該進程被觸發(fā)啟動時間、TIME:該進程實際使用CPU運行的時間、COMMAND:進程的啟動命令

僵尸進程:

一個進程結(jié)束了,但是如果該進程的父進程已經(jīng)先結(jié)束了,那么該進程就不會變成僵尸進程,因為每個進程結(jié)束的時候,系統(tǒng)都會掃描當前系統(tǒng)中所運行的所有進程,看有沒有哪個進程是剛剛結(jié)束的這個進程的子進程,如果是的話,就有INIT來接管它,成為它的父進程,子進程退出后init會回收占用的相關(guān)資源。
但是當子進程比父進程先結(jié)束,而父進程又沒有回收子進程,釋放子進程占用的資源,此時進程將會稱為一個僵尸進程。

ps -elf:查看靜態(tài)的進程統(tǒng)計信息

-e: 顯示系統(tǒng)內(nèi)所有進程信息
-l: 使用長格式顯示進程信息
-f: 使用完整的格式顯示進程信息
-a: 顯示所有進程pid
-T: 查看線程信息
ps -aT: 顯示所有線程



字段各列的解釋
F:內(nèi)核分配給進程的系統(tǒng)標記、S:進程的狀態(tài)、UID:啟動這些進程的用戶、PID:進程的進程ID、PPID:父進程的進程號(如果該進程是由另一個進程啟動的)、C:進程生命周期中的CPU利用率、PRI:進程的優(yōu)先級(越大的數(shù)字代表越低的優(yōu)先級)、NI:謙讓度值用來參與決定優(yōu)先級、ADDR:進程的內(nèi)存地址、SZ:假如進程被換出,所需交換空間的大致大小、WCHAN:若該進程在睡眠,則顯示睡眠中的系統(tǒng)函數(shù)名、STIME:進程啟動時間的系統(tǒng)時間、TTY:進程啟動的終端設(shè)備、TIME:運行進程需要的累計CPU時間、CMD:進程的啟動命令

top命令

查看動態(tài)的進程排名信息
命令模式:top
Ctrl+c退出或者q鍵
第一行是任務(wù)隊列信息
11:06:28 系統(tǒng)時間、up 1:22 系統(tǒng)已運行時長、1 user 當前登錄用戶數(shù)、load average:0.06,0.60,0.48 系統(tǒng)負載,即單位時間內(nèi)系統(tǒng)處理的任務(wù)數(shù),后面三個數(shù)值分別為1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值
第二行為進程信息
Tasks:總進程數(shù)、running:正在運行的進程數(shù)、sleeping:休眠的進程數(shù)、stopped:中止的進程數(shù)、zombie:僵死的進程數(shù)
第三行 CPU的信息
us:用戶占用、sy:內(nèi)核占用、ni:優(yōu)先級調(diào)度占用、id:空閑cpu,要了解空閑的cpu百分比,主要看%ID部分、wa:I/O等待占用、hi:硬件中斷占用、si:軟件中斷占用、st:虛擬化占用
第四行為內(nèi)存的信息
total:總內(nèi)存空間、free:空閑內(nèi)存、used:已用內(nèi)存、buff/cache:物理內(nèi)存和交換內(nèi)存的緩沖區(qū)總和
第五行為交換空間的信息
total:總交換空間、free:空閑交換空間、used:已用交換空間、avail Mem:可用物理空間
進程信息區(qū)各列解釋:
PID:進程ID、USER:進程所有的用戶名、PR:優(yōu)先級、NI:謙讓度值,負值表示高優(yōu)先級,正值表示低優(yōu)先級、VIRT:進程使用的虛擬內(nèi)存總量,單位KB、RES:進程使用的物理內(nèi)存大小,單位KB、SHR:共享內(nèi)存大小,單位KB、S:進程狀態(tài)、%CPU:上次更新到現(xiàn)在的CPU時間占用百分比、%MEN:進程使用的物理內(nèi)存百分比、TIME+:進程使用的CPU時間總計,單位1/100秒、COMMAND:命令名/命令行

top常用命令:
P鍵: 根據(jù)CPU使用百分比大小進行排序
M鍵: 根據(jù)駐留內(nèi)存大小進行排序
N鍵: 根據(jù)啟動時間進行排序
c鍵: 切換顯示命令名稱和完整命令
h鍵: 可以獲得top程序的在線幫助信息
k鍵: 根據(jù)提示輸入指定進程的PID號并按Enter鍵終止對應(yīng)的進程
q鍵: 退出top程序
數(shù)字1鍵: 顯示cpu個數(shù)和狀態(tài)
top -H: 顯示所有線程
top -H -p 顯示特定進程中的線程

查看CPU的負載情況load average的方法:uptime、w、top

查看進程信息pgrep

pgrep命令:根據(jù)特定條件查詢進程PID信息
-l: 顯示進程名,缺省時只輸出PID號
-U: 指定特定用戶
-t: 指定終端


查看進程樹pstree

pstree:以樹形結(jié)構(gòu)列出進程信息
patree -aup
-a: 顯示完整信息
-u: 列出對應(yīng)用戶名
-p: 列出對應(yīng)PID號


進程的啟動方式

手工啟動:用戶輸入命令,直接執(zhí)行程序
后臺啟動:在命令行尾加入“&”符號
進程的前后臺調(diào)度
Ctrl+Z組合鍵:將當前進程掛起,即調(diào)入后臺并停止執(zhí)行

jobs命令

jobs[-l]
查看處于后臺的任務(wù)列表

fg命令

將后臺進程恢復(fù)到前臺運行,可指定任務(wù)序號,終止進程的運行。
Ctrl+C組合鍵:中斷正在執(zhí)行的命令

kill、killall命令

kill用于終止指定PID號的進程;kill的信號是用-15表示的,是SIGTERM,是要告訴進程你需要被關(guān)閉,請自行停止運行并退出
killall用于終止指定名稱相關(guān)的所有進程,使用這個命令時,輸入跟關(guān)鍵字有關(guān)的所有進程都會被終止,所有這個命令慎用。
kill -9選項用于強制終止,代表的信號是SIGKILL,表示強制殺死該進程,這個信號不能被捕獲也不能被忽略。

pkill命令

根據(jù)特定條件終止相應(yīng)的進程
常用命令選項
-U:根據(jù)進程所屬的用戶名終止相應(yīng)進程
-t:根據(jù)進程所在的終端終止相應(yīng)進程

調(diào)度啟動

使用at命令,設(shè)置一次性計劃任務(wù)
命令格式:at [HH:MM] [yyyy-mm-dd]
不指定年月日的時候,默認是設(shè)置值的是當天時間,用Ctrl+d鍵提交任務(wù)


使用crontab命令,設(shè)置周期性計劃任務(wù)

按照預(yù)先設(shè)置的時間周期(分鐘、小時、天、月、周)重復(fù)執(zhí)行用戶指定的命令操作。
屬于周期性計劃任務(wù)
主要設(shè)置文件:全局配置文件,位于文件/etc/crontab
系統(tǒng)默認的設(shè)置,位于目錄:/etc/cron.*/
用戶定義的設(shè)置,位于文件:/var/spool/cron/用戶名

管理crontab計劃任務(wù)

編輯計劃任務(wù):crontab -e [-u 用戶名]
查看計劃任務(wù):crontab -l [-u 用戶名]
刪除計劃任務(wù):crontab -r [-u 用戶名]
命令格式畫圖
字段說明
分鐘取值為從0到59之間的任意整數(shù)
小時取值為從0到23之間的任意整數(shù)
日期取值為從1到31之間的任意整數(shù)
月份取值為從1到12之間的任意整數(shù)
星期取值為從0到7之間的任意整數(shù)0或7代表星期日
命令要執(zhí)行的命令或程序腳本

時間數(shù)值的特殊表示方法
*** 表示該范圍內(nèi)的任意時間
表示間隔的多個不連續(xù)時間點
- 表示一個連續(xù)的時間范圍
/* 指定間隔的時間頻率
示例:
(1) 3
: 每小時執(zhí)行一次;每小時的第3分鐘;
(2) 3 4
5:每周執(zhí)行一次;每周5的4點3分;
(3) 5 6 7
:每月執(zhí)行一次;每月的7號的6點5分;
(4) 7 8 9 10
:每年執(zhí)行一次;每年的10月9號8點7分;
(5) 9 8 3,7:每周三和周日的8點9分;
(6) 0 8,20 3,7:每周三、日的8點和20點各執(zhí)行一次。
(7) 0 9-18 1-5:周一至周五的9點至18點期間每小時執(zhí)行一次
(8) /5 *:每5分鐘執(zhí)行一次某任務(wù);

系統(tǒng)crond的配置文件:/etc/crontab文件

[root@CentOS6 ~]#cat /etc/crontab     ==# 系統(tǒng)cron的配置文件==SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# |  .------------- hour (0 - 23)# |  |  .---------- day of month (1 - 31)# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# |  |  |  |  |# *  *  *  *  * user-name command to be executed注意:(1) 每一行定義一個周期性任務(wù),共7個字段;    *  *  *  *  * : 定義周期性時間    user-name : 運行任務(wù)的用戶身份    command to be executed:任務(wù)(2) 此處的環(huán)境變量不同于用戶登錄后獲得的環(huán)境,因此,建議命令使用絕對路徑,或者自定義PATH環(huán)境變量;(3) 執(zhí)行結(jié)果郵件發(fā)送給MAILTO指定的用戶