進程和計劃任務
如何產生一個進程:
1)執行程序或者是命令
2)計劃任務
如何終止一個進程:
1)程序或者是命令執行完畢,自動終止
2)強制終止進程
進程管理
一.程序和進程的關系
程序:可執行的代碼和數據
進程:運行中的程序代碼
父子進程:進程創建的進程為子進程
1.靜態查看進程的統計信息;
(1)ps :
a:顯示終端下所有進程信息,包括其他用戶的進程
u:顯示進程的擁有者
x:顯示當前用戶所在終端下的進程信息,和a一起用,顯示所有進程
-e:顯示系統內所有進程信息
-l:長格式顯示
-f:完整的格式顯示
# /etc/init.d/httpd start
# ps -ef | grep httpd
UID? ? PID? ? ? ? ? PPID? C? STIME? ? TTY? ? ? ? ? TIME? ? ? ? ? ? CMD
root? ? ? 5088? ? ? ? ? 1? ? ? 2? 14:35? ? ? ?? ? ? ? ? 00:00:00 /usr/sbin/httpd
apache? ? 5091? ? ? 5088? 0? ? 14:35? ? ? ?? ? ? ? 00:00:00 /usr/sbin/httpd
apache? ? 5092? ? ? 5088? 0? ? 14:35? ? ? ?? ? ? ? 00:00:00 /usr/sbin/httpd
進程的擁有者 進程號? 父進程號 cpu使用的資源百分比 開始時間? 運行進程的終端名字 進程運行的時間 命令
pts:偽終端、虛擬終端
tty1--tty6: 字符終端
ps -aux 顯示結果
USER? ? ? PID %CPU %MEM? ? VSZ? RSS TTY? ? ? STAT START? TIME COMMAND
root? ? ? ? 1? 0.0? 0.1? 19348? 1332 ?? ? ? ? Ss? Aug02? 0:02 /sbin/init
root? ? ? ? 2? 0.0? 0.0? ? ? 0? ? 0 ?? ? ? ? S? ? Aug02? 0:00 [kthreadd]
root? ? ? ? 3? 0.0? 0.0? ? ? 0? ? 0 ?? ? ? ? S? ? Aug02? 0:02 [migration/0]
擁有者? 進程號 占用cpu百分比 占用內存百分比 占用的虛擬內存的大小 駐留內存大小 終端 進程狀態 開始時間 運行時間 命令
STAT:進程狀態
R:該進程正在運行
S:休眠進程
Z:僵尸進程,實際上該進程已經終止,但是它的父進程卻無法正常終止它,造成僵尸進程的狀態
T:該進程正在跟蹤或者已經停止
(2)pstree:樹形結構查看進程信息
-a:顯示完整信息
-u:列出名字
-p:列出PID號
# pstree
init─┬─abrtd
? ? ? ? ? ? ? ? ? ? ├─acpidclear
? ? ? ? ? ? ? ? ? ? ├─atd
? ? ? ? ? ? ? ? ? ? ├─automount───4*[{automount}]
? ? ? ? ? ? ? ? ? ? ├─bonobo-activati───{bonobo-activat}
init進程是所有進程的父進程
二、動態查看進程
? ? top:實時查看系統運行狀態? h 幫助 M 按照內存使用排序? P 按照CPU排序 q 退出
top - 15:07:52 up 2 days,? 7:10,? 9 users,? load average: 0.00, 0.01, 0.00
? ? ? ? 系統時間? ? 運行時長? ? ? ? ? 當前9個用戶登錄系統? ? 系統在1分鐘、5分鐘、15分鐘的平均負載情況
Tasks: 192 total,? 1 running, 191 sleeping,? 0 stopped,? 0 zombie
? ? ? 總共192個進程? 1個正在運行 191個休眠 0個停止的 0個僵尸進程
Cpu(s):? 1.5%us,? 0.2%sy,? 0.0%ni, 98.1%id,? 0.2%wa,? 0.0%hi,? 0.0%si,? 0.0%st
? 按數字1,展開CPU
Mem:? 1016516k total,? 914012k used,? 102504k free,? 100136k buffers
Swap:? 2097144k total,? ? 7220k used,? 2089924k free,? 374972k cached
? PID USER? ? ? PR? NI? VIRT? RES? SHR S %CPU %MEM? ? TIME+? COMMAND? ? ? ?
23539 root? ? ? 20? 0? 149m? 25m 7040 S? 4.3? 2.5? 4:40.87 Xorg? ? ? ? ? ?
24019 root? ? ? 20? 0? 308m? 16m 9556 S? 2.7? 1.7? 2:54.35 gnome-terminal?
5521 root? ? ? 20? 0? 336m? 15m? 11m S? 0.7? 1.6? 0:01.83 gnome-panel? ?
1598 root? ? ? 20? 0? 165m 2588 2132 S? 0.3? 0.3? 3:43.59 vmtoolsd? ? ? ?
5636 root? ? ? 20? 0 15032 1284? 932 R? 0.3? 0.1? 0:00.11 top? ? ? ? ? ?
23679 root? ? ? 20? 0? 403m? 11m 8376 S? 0.3? 1.1? 0:12.13 metacity? ? ? ?
23706 root? ? ? 20? 0? 446m? 21m? 11m S? 0.3? 2.2? 3:20.17 vmtoolsd? ? ? ? ?
------------------------
僅動態查看某個進程的狀態
? # top -p 23539? ? //其中23539是進程號
------------------------? ?
2.top動態查看進程:
-P:順序查看
3.pgrep:查看pid
-l:顯示進程名
-U:指定用戶
-t:指定終端
1、前臺運行:
? ? 直接在終端運行命令
? ? # firefox 172.16.254.251
? ? ? 會發現該程序一直占用終端,其他命令不能夠再在這個終端運行
2、后臺運行
? ? 1)命令執行的時候,直接將其放置于后臺運行
? # firefox 172.16.254.251 &
? ? ? ? ? ? [1] 6222
? ? ? ? 后臺運行不會占用執行命令的終端,用戶仍然可以使用這個終端做操作
? ? 2)對于一個已經運行的命令,如何將其放置于后臺
? ? ? # firefox 172.16.254.251
? ? ? ? ^Z[1]? Done? ? ? ? ? ? ? ? ? ? firefox 172.16.254.251? ? //按下ctrl+z
? ? ? ? [2]+? Stopped? ? ? ? ? ? ? ? firefox 172.16.254.251
? ? ? ? ctrl+z將前臺進程放置于后臺,但是該進程在后臺是停止的狀態
? ? # jobs? ? //查看后臺進程運行狀態
? ? ? ? ? ? [2]+? Stopped? ? ? ? ? ? ? ? firefox 172.16.254.251
? ? ? # fg 2? ? //激活后臺進程
? ? ? ? ? ? [2]+ firefox 172.16.254.251 &
? ? ? ? # jobs
? ? ? ? ? ? [2]+? Running? ? ? ? ? ? ? ? firefox 172.16.254.251 &
? ? bg 任務編號? :指定任務在后臺運行
? ? fg 任務編號? ? : 將后臺運行的命令變成前臺運行
? ? ? ? ? # fg 2
? ? ? ? ? ? ? ? firefox 172.16.254.251
注意:不管你是前臺運行,還是后臺運行,只要終端一關閉,進程就停止了。
那么如何讓一個命令或者程序脫離終端?
? ? 使用nohup命令。
? # nohup firefox 172.16.254.251 &
? ? ? ? [1] 6537
? # nohup: ignoring input and appending output to `nohup.out' //按回車
IPC:Interconnect Process Communication? 進程間通信
進程間通信的三種方式:
? ? 1、信號 signal
? ? 2、消息 message
? ? 3、共享內存 shared memory
信號是類unix系統中的一種通信機制,它用來中斷運行的進程執行某些操作
常用的信號:
? ? 查看信號的列表
? ? ? # kill -l
? ? 1) SIGHUP:重置進程的配置,即不停止服務的情況下,重新讀取配置文件
? ? ? ? ? ? kill -1 PID 或者kill -HUP PID
? ? 2) SIGINT:中斷(interrupt),相當于執行了ctrl+c
? ? ? ? ? ? 一個標簽執行:
? ? ? ? ? ? ? ? # firefox 172.16.254.251
? ? ? ? ? ? 另一個標簽執行
? ? ? ? # ps -ef | grep firefox
? ? ? ? ? ? root? ? ? 6855? 6630? 4 16:16 pts/0? ? 00:00:01 /usr/lib64/firefox/firefox 172.16.254.251
? ? ? ? ? ? root? ? ? 6911? 6898? 0 16:17 pts/1? ? 00:00:00 grep firefox
? ? ? ? ? ? # kill -2 6855? //發現第一個標簽的命令被終止了
? ? 9) SIGKILL:強制殺死進程、無條件殺死
? ? ? ? ? ? # firefox 172.16.254.251
? ? ? ? ? ? ? ? Killed
? ? ? ? ? # ps -ef | grep firefox
? ? ? ? ? ? root? ? ? 6982? 6630? 7 16:22 pts/0? ? 00:00:01 /usr/lib64/firefox/firefox 172.16.254.251
? ? ? ? ? ? root? ? ? 7029? 6898? 0 16:23 pts/1? ? 00:00:00 grep firefox
? ? ? ? ? ? # kill -9 6982
? ? 15) SIGTERM:終止進程,進程不一定會死
? ? 20) SIGTSTP:相當于按下ctrl+z的時候發送的信號
? ? ? ? ? ? # ps -ef | grep firefox
? ? ? ? ? ? root? ? ? 7104? 6630 13 16:29 pts/0? ? 00:00:01 /usr/lib64/firefox/firefox 172.16.254.251
? ? ? ? ? ? root? ? ? 7146? 6898? 0 16:29 pts/1? ? 00:00:00 grep firefox
? ? ? ? ? # kill -20 7104
? ? ? ? ? # firefox 172.16.254.251
? ? ? ? ? ? [1]+? Stopped? ? ? ? ? ? ? ? firefox 172.16.254.251
pkill:按照進程的屬性結束進程
? ? 按照進程名字殺死進程
? ? # pkill gnome-panel?
? ? 按照用戶名殺死進程
? ? # su - test
? ? $ vim /etc/passwd
? ? # pkill -U test?
killall:
? ? killall 命令名字? ? //殺死全部的同名進程? ?
xkill:殺死圖形化資源
? ? 當執行了xkill之后,鼠標會變成“x”形,點到任何圖形資源,就會終止該資源的運行
謙讓值:nice
? ? 作用:指定或者調整用戶進程的nice值
? ? ? ? ? ? nice值越高,該進程搶占資源的能力越弱
? ? ? ? ? ? nice值越低,該進程搶占資源的能力越強
? ? ? 范圍:-20~19
1、相關命令
? ? nice:運行時直接設置nice值
? ? ? ? 格式:nice -n 數字 command
? ? renice:對于已經運行的,調整nice值
? ? ? ? 格式:renice 數字 PID
2、例子
# cat loop.sh
? ? ? ? #!/bin/bash
while true
do
echo hello > /dev/null
done
# cp loop.sh loop1.sh
# chmod +x loop*
? ? 1)在程序執行時,直接指定nice值
# nice -n 7 ./loop.sh &
[1] 8890
# nice -n 14 ./loop1.sh &
[2] 8896
# top
? ? ? ? ? PID USER? ? ? PR? NI? VIRT? RES? SHR S %CPU %MEM? ? TIME+? COMMAND? ? ? ?
? ? ? ? 8937 root? ? ? 27? 7? 103m 1192 1028 R 94.4? 0.1? 0:43.74 loop2.sh? ? ? ?
? ? ? ? 8890 root? ? ? 27? 7? 103m 1196 1028 R 81.4? 0.1? 2:58.99 loop.sh? ? ? ?
? ? ? ? 8896 root? ? ? 34? 14? 103m 1196 1028 R 16.9? 0.1? 2:12.98 loop1.sh? ?
? ? ? ? ? ? 從上實驗看出,nice越大,獲得的資源越少,反之則反。
? 2)使用renice調整運行中的進程的nice值
? ? ? ? # renice 19 8890
? ? ? ? ? ? 8890: old priority 7, new priority 19
? ? ? ? # top
? ? ? ? # ps -ef | grep loop
? ? ? ? ? ? root? ? ? 8890? 7656 80 09:37 pts/0? ? 00:06:26 /bin/bash ./loop.sh
? ? ? ? ? ? root? ? ? 8896? 7656 49 09:38 pts/0? ? 00:03:49 /bin/bash ./loop1.sh
? ? ? ? ? ? root? ? ? 8937? 7656 91 09:40 pts/0? ? 00:05:09 /bin/bash ./loop2.sh
? ? ? ? ? ? root? ? ? 9044? 7656? 0 09:45 pts/0? ? 00:00:00 grep loop
? ? ? ? # killall loop.sh
? ? ? ? # killall loop1.sh
? ? ? ? ? ? [1]? Terminated? ? ? ? ? ? ? nice -n 7 ./loop.sh
? ? ? ? # killall loop2.sh
? ? ? ? ? ? [2]-? Terminated? ? ? ? ? ? ? nice -n 14 ./loop1.sh
? ? ? ? ? ? [3]+? Terminated? ? ? ? ? ? ? nice -n 7 ./loop2.sh
進程的調度:
ctrl+Z:轉入后臺并且停止
jobs:查看處于后臺的任務
fg:將后臺的進程恢復前臺運行,可指定任務號
ctrl+c:中斷正在執行的命令
kill:終止PID? -9 強制終止?
pkill:根據 特定條件終止進程
-t:停止終端進程
-U:按用戶名終止進程
服務控制:
? ? 1、開機是否啟動
? ? chkconfig --list httpd 查看httpd服務開啟情況
chkconfig --level 3 httpd on(off)
2、立刻調好服務:
? ? 可是使用啟動腳本絕對路徑? /etc/rc.d/init.d/httpd start
使用service 命令? ? service iptables stop
三.計劃任務:
1.at:? 一次性計劃任務
at [HH:MM] [yy-mm-dd]
>command
>(ctrl+d)
atq:查看任務
atrm:刪除任務 后邊指定要刪除的任務號
2.crontab? 周期性計劃任務
crontab命令----crond服務
全局設定的配置文件:/etc/crontab
*任意? ,多個不連續? - 連續? ? /間隔頻率
系統默認的設置:/etc/cron.*
用戶自定義的配置文件:/var/spool/cron/user_name
使用:
編輯任務:
crontab -e [-u user_name]
查看任務:
crontab -l [-u user_name]
刪除任務:
crontab -r [-u user_name]
補充:
PRI :進程優先權,代表這個進程可被執行的優先級,其值越小,優先級就越高,越早被執行
NI :進程Nice值,代表這個進程的優先值
%nice :改變過優先級的進程的占用CPU的百分比 (呵呵,這句好難理解是吧,不急慢慢來^_^)
PRI是比較好理解的,即進程的優先級,或者通俗點說就是程序被CPU執行的先后順序,此值越小進程的優先級別越高。那NI呢?就是我們所要說的nice值了,其表示進程可被執行的優先級的修正數值。如前面所說,PRI值越小越快被執行,那么加入nice值后,將會使得PRI變為:PRI(new)=PRI(old)+nice。由此看出,PR是根據NICE排序的,規則是NICE越小PR越前(小,優先權更大),即其優先級會變高,則其越快被執行。如果NICE相同則進程uid是root的優先權更大。
在LINUX系統中,Nice值的范圍從-20到+19(不同系統的值范圍是不一樣的),正值表示低優先級,負值表示高優先級,值為零則表示不會調整該進程的優先級。具有最高優先級的程序,其nice值最低,所以在LINUX系統中,值-20使得一項任務變得非常重要;與之相反,如果任務的nice為+19,則表示它是一個高尚的、無私的任務,允許所有其他任務比自己享有寶貴的CPU時間的更大使用份額,這也就是nice的名稱的來意。