![]() |
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(24):查看系統狀態 |
![]() |
進程管理在系統shell提示下,使用者可以輸入各種命令來執行相應的工作。每個命令通常從終端鍵盤中獲取輸入,將輸 出打印到終端屏幕上,Unix使用標准輸入stdio和標准輸出stdout,來表示每個命令的輸入和輸出,還使用一 個標准錯誤輸出stderr用于輸出錯誤信息。這三個標准輸入輸出系統缺省與終端設備相聯系在一起,但是也可以使用管 道的概念將它們重新定向,從一個文件或另一個命令中獲取輸入,輸出到另外的文件中或作為另一個命令的輸入等。
FreeBSD可以同時運行多個進程,在shell下直接輸入命令十,shell將進程放到前台執行。如果要 將進程放到后台執行,需要在命令行的結尾加上一個 “&” 符號。下面的命令從后台執行,從ftp.isc. org下載文件。
當程序已經在前台執行的時候,可以使用^Z將這個程序挂起,暫停執行。然后可以使用bg命令將這個挂起的程序 放到后台執行,或者使用fg將某個在后台或挂起的進程放到前台執行。 當在后台運行了程序的時候,可以用jobs命令來查看后台作業的狀態。在有多個后台程序時,要使用來參數的fg 命令將不同序號的后台作業切換到前台上運行。
在啟動了多個程序之后,可以使用ps命令來查看這些進程及其狀態。
顯示的結果包括進程的標識號PID,控制終端TT(p0表示控制終端為ttyp0),進程的狀態STAT,進 程使用的處理器時間TIME和具體的命令。 可以給ps命令加上參數,來獲得更多的輸出內容,以下命令將輸出系統中所有的進程:
當用戶啟動一個進程的時候,這個進程是運行在前台,使用與相應控制終端相聯系的標准輸入、輸出進行輸入和輸出 。即使將進程的輸入輸出重定向,并將進程放在后台執行,進程仍然和當前終端設備有關系。正因為如此,在當前的登錄會話 結束時,控制終端設備將和登錄進程相脫離,那么系統就向所有與這個終端相聯系的進程發送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” 顯示這几個系統表的狀態,包括當前使用 的和可以利用的系統表空間,因此可以用來檢查系統在當前負載下是使用多大的系統表,幫助進行優化系統性能。
vmstat報告內核的統計信息,包括進程、虛存、處理器、磁盤等。可以使用 “-w” 參數指定每隔几秒時 間,報告一次系統狀態。
其他與vmstat類似的命令還有,fstat報告系統中打開文件的信息,可以使用文件名、進程號、用戶名, 以及指定文件所在的文件系統來限制要顯示的文件。iostat報告內核的輸入輸出統計信息,包括磁盤、終端等設備的I/O 狀態。netstat報告網絡的有關統計信息。nfsstat顯示NFS的統計信息。 除此之外,systat以全屏幕方式顯示各種系統統計信息,缺省情況下systat是報告處理器的使用率,包 括總利用狀態、空閑使用率和各個進程的使用率。通過指定參數,systat也能進行I/O的統計、虛存的統計、網絡的 統計等,這些參數包括-iostat, -vmstat, -mbufs, -netstat, -ip, -icmp, -tcp, -swap等。
除了這些系統提供的命令之外,FreeBSD也提供多種有效的系統工具,如綜合ps、systat和vmst at功能的top等。這些軟件通常可以在多種Unix系統中使用,也是十分常用的工具。也可以在FreeBSD系統中 安裝網絡管理代理snmpd,然后使用網絡管理系統通過網絡來獲得FreeBSD主機的各種系統信息。 未完,待續。。。 |
|||||||||||
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(24):查看系統狀態 | ||||||||||||
Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved
版權所有 四通利方 新浪網