一、進程的概念
1、進程和程式的區別
1)程式是靜態概念,本身作為一種軟體資源長期儲存,而進程是程式的執行過程,它是動態概念,有一定的生命週期,是動態產生和消亡的
2)程式和進程無一一對應關係,一個程式可以由多個進程共用;另一方面,一個進程活動中可以順序地執行若干程式
2、父進程與子進程
1)子進程是由一個進程所產生的進程,產生這個子進程的進程稱為父進程
2)在Linux系統中,使用系統調用fork建立進程。fork複製的內容包括父進程的資料和堆棧段以及父進程的進程環境
3)父進程終止,子進程自然終止
3、前台進程和後台進程
1)在Shell提示處輸入命令後,建立一個子進程,運行命令,Shell等待命令退出,然後返回到對使用者給出提示符。這條命令與Shell非同步運行,即在前台運行,使用者在它完成之前不能執行其他命令
[root@bogon ~]# find /etc -name init/etc/kdump-adv-conf/kdump_initscripts/init/etc/webmin/init/etc/init/etc/sysconfig/init[root@bogon ~]#
2)在Shell提示處輸入命令後,若後隨一個&,Shell建立的子進程運行此命令,但不等待命令退出,而直接返回到對使用者給出提示。這條命令與Shell同步運行,即在後台運行,後台進程必須是非互動。
[root@bogon ~]# find /etc -name init > /tmp/init.find &[1] 1656[root@bogon ~]#
1656為處理該命令的子進程ID
4、進程狀態
1)就緒:進程已經分配到資源,但因為其他進程正佔用CPU,所以暫時不能運行而等待分配CPU的狀態
2)等待:因等待某種事件而暫時不能啟動並執行狀態
3)運行:進程分配到CPU,正在處理器上運行
5、查看所有登入使用者資訊 w
[root@bogon ~]# w 22:05:30 up 56 min, 2 users, load average: 0.00, 0.00, 0.00USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot tty1 - 21:10 54:31 0.05s 0.05s -bashroot pts/0 192.168.0.101 21:11 0.00s 0.09s 0.01s w[root@bogon ~]#
1)JCPU:以終端號區分,該終端所有相關的進程執行時,所消耗的CPU時間會顯示在這裡
2)PCPU:CPU執行程式耗費的時間
3)WHAT:使用者正在執行的操作
4)load average:分別顯示系統在過去的1、5、15分鐘內的平均負載程度
5)FROM:顯示使用者從何處登入
6)IDEL:使用者閑置時間
7)查看個別使用者登入資訊:w 使用者名稱
6、查看系統中的進程 ps
常用選項:
a:顯示所有使用者的進程
u:顯示使用者名稱和啟動時間
x:顯示沒有控制終端的進程
e:顯示所有進程,包括沒有控制終端的進程
l:長格式顯示
w:寬行顯示
1)查看隸屬於自己的進程
[root@bogon ~]# ps PID TTY TIME CMD 1581 pts/0 00:00:00 bash 1606 pts/0 00:00:00 ps[root@bogon ~]#
2)查看隸屬於自己進程的詳細資料ps -u or -l
[root@bogon ~]# ps -uWarning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1473 0.0 0.0 2004 484 tty2 Ss+ 21:24 0:00 /sbin/mingettyroot 1475 0.0 0.0 2004 480 tty3 Ss+ 21:24 0:00 /sbin/mingettyroot 1477 0.0 0.0 2004 480 tty4 Ss+ 21:24 0:00 /sbin/mingettyroot 1479 0.0 0.0 2004 480 tty5 Ss+ 21:24 0:00 /sbin/mingettyroot 1481 0.0 0.0 2004 508 tty6 Ss+ 21:24 0:00 /sbin/mingettyroot 1552 0.0 0.1 8016 1652 tty1 Ss+ 21:24 0:00 -bashroot 1581 0.0 0.1 6736 1612 pts/0 Ss 21:30 0:00 -bashroot 1607 2.0 0.1 6548 1040 pts/0 R+ 21:33 0:00 ps -u[root@bogon ~]#
3)查看系統中指定進程資訊
[root@bogon ~]# ps -le | grep sshd5 S 0 1331 1 0 80 0 - 2131 - ? 00:00:00 sshd4 S 0 1579 1331 0 80 0 - 2903 - ? 00:00:00 sshd[root@bogon ~]#
[root@bogon ~]# ps -ef | grep sshdroot 1331 1 0 21:24 ? 00:00:00 /usr/sbin/sshdroot 1579 1331 0 21:30 ? 00:00:00 sshd: root@pts/0 root 1624 1581 0 21:46 pts/0 00:00:00 grep sshd[root@bogon ~]#
7、kill—殺死進程
1)關閉進程:kill 進程號
2)kill -9 進程號(強行關閉)
3)kill -l 進程號(重啟進程)
4)關閉圖形程式 xkill
5)結束所有進程 killall 進程名稱
6)尋找服務進程號 pgrep 服務名稱
7)關閉進程:pkill 進程名稱
8、指定程式的運行優先順序
1)nice 指定程式的運行優先順序
格式:nice -n command
例如:nice -5 myprogram
2)renice 改變一個正在啟動並執行進程的優先順序
格式:renice n pid
例如:renice -5 777
3)優先順序取值範圍(-20,19)
9、nohup
使進程在使用者退出登入後仍舊繼續執行,nohup命令將執行後的資料資訊和錯誤資訊預設儲存到檔案nohup.out中
格式: nohup program &
[root@bogon ~]# nohup find /etc -name init* > /root/find.init.20121225 &
10、進程的掛起和恢複
1)進程的中止(掛起)和終止
掛起:Ctrl+Z
終止:Ctrl+C
2)進程的恢複
恢複到前台繼續運行 fg
恢複到後台繼續運行 bg
3)查看被掛起的進程 jobs
[root@bogon ~]# jobs[1]+ Stopped find / -name inittab[root@bogon ~]#
調到前台執行:fg 編號
[root@bogon ~]# fg 1find / -name inittab/etc/webmin/inittab/etc/inittab/backup/etc/inittab
調到後台執行 bg 編號
[root@bogon ~]# bg 1
11、top
進程狀態顯示和進程式控制制,每5秒鐘自動重新整理一次(動態顯示)
常用選項:(在top執行後使用)
d:指定重新整理的時間間隔
c:顯示真箇命令列而不僅僅顯示命令名
u:查看指定使用者的進程
k:終止執行中的進程
h or ?:獲得協助
r:重新設定進程優先順序
W:將當前設定寫入~/.toprc檔案中
二、計劃任務
1、計劃任務的命令
1)at 安排作業在某一時刻執行一次
安排一個或多個命令在指定時間運行一次
at的命令格式及參數:
at [-f 檔案名稱] 時間
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
指定在今天下午18:00執行某命令,假設現在時間是下午15:00,2013年1月2日
命令格式如下:
at 6:00pm
at 18:00
at 18:00 today
at now + 3 hours
at now + 180 minutes
at 18:00 2.1.13
at 18:00 1/2/13
互動方式執行:比如在5分鐘後把/etc/motd 中的內容廣播出去
[root@localhost ~]# at now +5 minutesat> /usr/bin/wall < /etc/motdat> <EOT>job 1 at 2013-01-01 21:01[root@localhost ~]#
輸入完命令後,按Ctrl+d儲存,時間一到,就會把內容廣播出去了
使用命令檔案方式
把要執行的命令寫在指令檔at.script中,然後使用下面的命令
[root@localhost ~]# at -f at.script 21:20 1/2/13job 2 at 2013-01-02 21:20[root@localhost ~]#
at -l or atq 查看隊列中的任務
[root@localhost ~]# at -l2 2013-01-02 21:20 a root[root@localhost ~]#
[root@localhost ~]# atq2 2013-01-02 21:20 a root[root@localhost ~]#
at -d or atrm 刪除隊列中的任務
[root@localhost ~]# at -d 2[root@localhost ~]#
產生的計劃任務存放在:/var/spool/at
at 設定檔
作用:限制哪些使用者可以使用at命令
/etc/at.allow
/etc/at.deny
2)batch 安排作業在系統負載不重時執行一次
安排一個或者多個命令在系統負載較輕時執行一次(一般情況下負載較輕是指平均負載降到0.8以下)
使用方法同at
3)cron 安排周期性啟動並執行作業
用於產生cron進程所需要的crontab檔案
crontab的命令格式
crontab {-l|-r|-e}
-l 顯示當前的crontab
-r 刪除當前的crontab
-e 使用編輯器編輯當前的crontab檔案
crontab檔案格式:
分鐘 小時 天 月 星期 命令/指令碼
minute hour day-of-month month-of-year day-of-week commands
minute 一小時鐘的哪一分鐘[0~59]
hour 一天中的哪個小時[0~23]
day-of-month 一月中的哪一天[1~31]
month-of-year 一年中的哪一月[1~12]
day-of-week 一周中的哪一天[0~6]
commands 執行的命令
分鐘 小時 天 月 星期 命令/指令碼
每天淩晨4點執行: 0 4 * * *
每周二和周五下午6點執行: 0 18 * * 2,5(逗號分隔不連續的值)
1月到3月每周二和周五下午6點執行: 0 18 * 1-3 2,5 (連續的值用-串連)
*/2(每隔2分鐘)
crontab檔案建好以後可以到/var/spool/cron目錄中確認