FreeBSD程式管理(轉)

gugu99發表於2007-08-11
FreeBSD程式管理(轉)[@more@]

  在系統shell提示下,使用者可以輸入各種命令來執行相應的工作。每個命令通常從終端鍵盤中獲取輸入,將輸出列印到終端螢幕上,Unix使用標準輸入stdio和標準輸出stdout,來表示每個命令的輸入和輸出,還使用一個標準錯誤輸出stderr用於輸出錯誤資訊。這三個標準輸入輸出系統預設與終端裝置相聯絡在一起,但是也可以使用管道的概念將它們重新定向,從一個檔案或另一個命令中獲取輸入,輸出到另外的檔案中或作為另一個命令的輸入等。 $ ls > ls.out

$ cat < ls.out

$ ls -l | grep mbox

  FreeBSD可以同時執行多個程式,在shell下直接輸入命令十,shell將程式放到前臺執行。如果要將程式放到後臺執行,需要在命令列的結尾加上一個 “&” 符號。下面的命令從後臺執行,從ftp.isc. org下載檔案。

$ wget ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz &

  當程式已經在前臺執行的時候,可以使用^Z將這個程式掛起,暫停執行。然後可以使用bg命令將這個掛起的程式放到後臺執行,或者使用fg將某個在後臺或掛起的程式放到前臺執行。

  當在後臺執行了程式的時候,可以用jobs命令來檢視後臺作業的狀態。在有多個後臺程式時,要使用來引數的fg 命令將不同序號的後臺作業切換到前臺上執行。

$ jobs

[1]+ Running  wget ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz &

$ fg %1

wget ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz

  在啟動了多個程式之後,可以使用ps命令來檢視這些程式及其狀態。

$ ps

 PID TT STAT   TIME COMMAND

 501 p2 Ss   0:00.24 -bash (bash)

 988 p2 R+   0:00.00 ps

 765 p3 Is+  0:00.28 -bash (bash)

 230 v0 Is+  0:00.14 -bash (bash)

  顯示的結果包括程式的標識號PID,控制終端TT(p0表示控制終端為ttyp0),程式的狀態STAT,程式使用的處理器時間TIME和具體的命令。

  可以給ps命令加上引數,來獲得更多的輸出內容,以下命令將輸出系統中所有的程式:

$ ps waux

USER   PID %CPU %MEM  VSZ RSS TT STAT STARTED   TIME COMMAND

wb    989 0.0 0.4  400 236 p2 R+  5:48PM  0:00.00 ps -aux

root    1 0.0 0.1  496  72 ?? Is  10:12PM  0:00.02 /sbin/init --

root    2 0.0 0.0   0  0 ?? DL  10:12PM  0:07.05 (pagedaemon)

root    3 0.0 0.0   0  0 ?? DL  10:12PM  0:00.20 (vmdaemon)

root    4 0.0 0.0   0  0 ?? DL  10:12PM  0:04.27 (syncer)

root   27 0.0 0.0  204  0 ?? IWs -     0:00.00 (adjkerntz)

root   91 0.0 0.5  820 328 ?? Is  2:12PM  0:00.82 syslogd

daemon  100 0.0 0.0  792  0 ?? IWs -     0:00.00 (portmap)

root   131 0.0 0.3  864 164 ?? Is  2:12PM  0:00.06 inetd

root   134 0.0 0.3  980 192 ?? Is  2:12PM  0:00.11 cron

root   138 0.0 0.6 1252 380 ?? Is  2:12PM  0:00.11 sendmail: accepti

wb    230 0.0 1.1 1540 668 v0 Is+  2:12PM  0:00.14 -bash (bash)

root   231 0.0 0.0  824  0 v1 IWs+ -     0:00.00 (getty)

root   232 0.0 0.0  824  0 v2 IWs+ -     0:00.00 (getty)

root   500 0.0 0.9  876 524 ?? Ss  4:19PM  0:01.78 telnetd

wb    501 0.0 1.4 1540 888 p2 Ss  4:19PM  0:00.24 -bash (bash)

root   698 0.0 1.5 1644 900 ?? Is  4:49PM  0:00.02 /usr/local/sbin/s

root   700 0.0 1.2 1308 748 ?? Ss  4:49PM  0:00.22 /usr/local/sbin/n

root   702 0.0 3.4 2900 2112 ?? S   4:49PM  0:00.32 /usr/local/sbin/s

root   764 0.0 0.9  880 540 ?? Is  5:10PM  0:00.22 telnetd

wb    765 0.0 1.7 1536 1052 p3 Is+  5:10PM  0:00.28 -bash (bash)

root    0 0.0 0.0   0  0 ?? DLs 10:12PM  0:00.02 (swapper)

  當使用者啟動一個程式的時候,這個程式是執行在前臺,使用與相應控制終端相聯絡的標準輸入、輸出進行輸入和輸出。即使將程式的輸入輸出重定向,並將程式放在後臺執行,程式仍然和當前終端裝置有關係。正因為如此,在當前的登入會話結束時,控制終端裝置將和登入程式相脫離,那麼系統就向所有與這個終端相聯絡的程式傳送SIGHUP的訊號,通知程式線路已經掛起了,如果程式沒有接管這個訊號的處理,那麼預設的反應是程式結束。因此普通的程式並不能真正脫離登入會話而執行程式,為了使得在系統登入後還可以正常執行,只有使用命令nohup來啟動相應程式。

  從上面的ps的輸出結果可以看出,有些程式沒有控制終端,這些程式通常是一些後臺程式。使用命令nohup當然可以啟動這樣的程式,但nohup啟動的程式在程式執行完畢就退出,而常見的一些服務程式通常永久的執行在後臺,不向螢幕輸出結果。在Unix中這些永久的後臺程式稱為守護程式(daemon)。守護程式通常從系統啟動時自動開始執行,系統關閉時才停止。如果偶然某個守護程式消失了,那麼它提供的服務將不再能被使用。

  在守護程式中,最重要的一個是超級守護程式inetd,這個程式接管了大部分網路服務,但並不是對每個服務都自己進行處理,而是依據連線請求,啟動不同的服務程式與客戶機打交道。inetd支援網路服務種類在它的設定檔案 /etc/inet.conf中定義。inet.conf檔案中的每一行就對應一個埠地址,當inetd接受到連線這個埠的連線請求時,就啟動相應的程式進行處理。使用inetd的好處是系統不必啟動很多守護程式,從而節約了系統資源,然而使用inetd啟動守護程式相應反應會遲緩一些,不適合用於被密集訪問的服務程式。

  當使用者希望要停止一個程式時,如果程式在前臺執行並接收輸入的條件下,可以輸入^D,告訴程式輸入結束,通常這意味著需要程式進行的處理要結束了,從而通知程式結束。對於有些不以檔案輸入結束作為結束標誌的程式,那麼就可以使用^C來向程式傳送訊號中斷程式。

  如果上述方式均無效,或者程式執行在後臺或者是一個守護程式,則需要手工向程式傳送訊號,這可以透過kill 命令來做到。使用 “kill PID” 來向程式傳送終止訊號SIGTERM,這個訊號告訴程式需要退出。但是這些傳送的訊號都能被程式透過程式設計的手段捕獲並對其進行處理,一旦程式在這個處理過程中沒有退出,而是忽略這個訊號的情況下,就無法殺死程式。這時只能使用 “kill -9 PID” 向PID代表的程式傳送SIGKILL訊號,這個訊號不能被程式本身捕獲,從而無條件殺死程式。但是最好先首先傳送SIGTERM訊號終止程式。而很多守護程式能夠捕獲 SIGHUP掛線訊號,會根據這個訊號進行處理,例如重新讀入配置檔案,重新重新整理程式本身等,因此可以再更改程式的配置檔案之後,使用 “kill -HUP pid” 重新整理程式的配置。

  kill命令需要使用程式的標識號PID,因此需要首先執行ps以得到這個標識號。而FreeBSD下可以使用程式的名字來給程式傳送訊號,這個命令為killall,對於大部分情況,它使用起來更為方便。

  • 檢視系統狀態

  FreeBSD下提供了相當豐富的工具可以用來檢視系統的狀態,使用者可以透過它們來了解系統狀態,從而最佳化系統效能。這些工具通常讀取/dev/mem、/dev/kmem來獲得記憶體中的系統資訊,使用/kernel將這些資訊中的變數轉換為名字。最基本的檢視系統狀態的命令為ps,用於報告當前系統中執行的程式的狀態。

  pstat能顯示系統中開啟的檔案數量、交換裝置的使用率等系統資訊。pstat預設使用/dev/mem裝置檔案,從系統記憶體中讀取這些資料,或者可以指定一個core檔案,那麼pstat從這個檔案中讀取資料。還需要給pstat 一個引數來告訴pstat應該顯示那種系統資訊,通常使用 “pstat -f” 顯示出當前開啟檔案的列表, “pstat -s” 顯示交換裝置的當前狀態, “pstat -t” 顯示當前使用的終端裝置檔案的狀態, “pstat -v” 顯示啟用的v節點的當前狀態。 “pstat -T” 顯示這幾個系統表的狀態,包括當前使用的和可以利用的系統表空間,因此可以用來檢查系統在當前負載下是使用多大的系統表,幫助進行最佳化系統效能。

$ pstat -T

69/8232 files

4M/137M swap space

  vmstat報告核心的統計資訊,包括程式、虛存、處理器、磁碟等。可以使用 “-w” 引數指定每隔幾秒時間,報告一次系統狀態。

$ vmstat

procs   memory   page          disks    faults   cpu

r b w   avm  fre flt re pi po fr sr wd0 wd1 fd0  in  sy cs us sy id

0 0 0  3752 30476 643  0  0  0 19 43  0  0  0 262 2599 85 56 3 41

  其他與vmstat類似的命令還有,fstat報告系統中開啟檔案的資訊,可以使用檔名、程式號、使用者名稱,以及指定檔案所在的檔案系統來限制要顯示的檔案。iostat報告核心的輸入輸出統計資訊,包括磁碟、終端等裝置的I/O 狀態。netstat報告網路的有關統計資訊。nfsstat顯示NFS的統計資訊。

  除此之外,systat以全螢幕方式顯示各種系統統計資訊,預設情況下systat是報告處理器的使用率,包括總利用狀態、空閒使用率和各個程式的使用率。透過指定引數,systat也能進行I/O的統計、虛存的統計、網路的統計等,這些引數包括-iostat, -vmstat, -mbufs, -netstat, -ip, -icmp, -tcp, -swap等。

/0  /1  /2  /3  /4  /5  /6  /7  /8  /9  /10

   Load Average  ||

    /0  /10 /20 /30 /40 /50 /60 /70 /80 /90 /100

       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

root   XF86_S3.cx XXXXXXX

wb      kpanel XXX

wb       kfm XX

wb     kbgndwm XX

wb    kblankscrn

wb     krootwm

wb       kwm

  除了這些系統提供的命令之外,FreeBSD也提供多種有效的系統工具,如綜合ps、systat和vmst at功能的top等。這些軟體通常可以在多種Unix系統中使用,也是十分常用的工具。也可以在FreeBSD系統中安裝網路管理代理snmpd,然後使用網路管理系統透過網路來獲得FreeBSD主機的各種系統資訊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-944759/,如需轉載,請註明出處,否則將追究法律責任。

相關文章