Linu系統管理員工具包進程管理技巧_第1頁
Linu系統管理員工具包進程管理技巧_第2頁
Linu系統管理員工具包進程管理技巧_第3頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Linux系統管理員工具包進程管理技巧Linux系統管理員工具包:進程管理技巧2010-11-3014:45本文屆轉載自網絡,僅供個人娛樂參考使用,如有轉載請標明出處,若有侵權等后果,本人概不負責!本文章如果無意對他人著作權及相關權利構成侵犯一經權利人要求,本人將立即刪除。學習如何獲取所需的UNIX進程信息。對于所有的系統管理員來說,了解自己的UNIX系統正在運行的進程是最基本的要求之一。標準的進程列表很有用,但是它所提供的信息格式不正確或者沒有包含所需的進程或信息。能從進程列表中選擇特定類型的數據將使管理任務更加容易。在本文中,您將了解到如何擴展該進程列表以改善信息的可讀性,或者提供在其他地

2、方不易獲得的摘要和信息。您還將看到如何跨不同的UNIX平臺獲取進程信息的標準化的方法。關于本系列通常,UNIX管理員都擁有一套他/她經常使用協助管理進程的實用程序、技巧和系統。有一些重要的實用程序、命令行鏈以及腳本可用來簡化各種處理過程。這些工具中有一部分來自于操作系統,而大部分的技巧則來源于長期的經驗和簡化系統管理員工作的要求。本系列文章主要專注于最大限度地利用各種UNIX環境中可用的工具,包括簡化異類環境中的管理任務的方法。使用psps命令行工具歹0出了正在運行的進程。該工具存在于所有的UNIX變種中,并且大體上都按相同的基本方式工作,即向內核請求正在運行的進程列表,然后報告進程列表及其屆

3、性,如內存使用情況、運行時間和其他詳細信息。ps工具實際上是一個非常強大的工具,盡管許多管理員可能僅使用可用選項中的某一兩項來查看所需的信息。可以利用內置命令行選項從命令中獲取更多的信息,甚至可以將ps通過管道與其他命令結合起來,以獲取所需的準確信息。列出所有進程即使是以root身份登錄,ps的標準輸出也只列出了您所運行的進程。根據您的UNIX環境是基于BSD或者AT&TSysVUNIX基礎部分對用來獲取系統中其他進程信息的基本命令行選項做出相應的變動,或者改變所顯示的信息。在基于BSD的UNIX環境中,輸出包括進程ID、終端、狀態、時間(在CPlfr的執行時間,單位為秒,而不是進程開

4、始運行的時間),以及所執行的命令,如活單1所示。活單1列出BSDUNIX變種上的進程$psPIDTTSTATTIMECOMMAND391p5SO00.24/bin/bash9165p5S+0:00.50emacs476p6SO:01.03/bin/bash9299p6SO:00.09xterm9319p6S0:00.07xterm9423p6S0:00.12ftpatuin9513p6R+000.01ps9301p7Ss+0:00.01/usr/X11R6/bin/luit9302p8Ss+000.03bash9321p9Ss+0:00.01/usr/X11R6/bin/luit9322paS

5、s+000.02bash在SVR仰境中,所提供的列較少(您得不到進程狀態信息),如下面的活單2所示。活單2.列出SVR4UNIX變種上的進程$psPIDTTYTIMECMD19915pts/300:00:00bash29145pts/300:00:00emacs32256pts/300:00:00emacs26986pts/300:00:00xterm31303pts/300:00:00ftp31358pts/300:00:00ps要獲取系統中正在運行的所有進程的列表,需要根據所使用的UNIX變種來使用不同的命令行選項。在BSDUNIX中,-a命令行選項列出了包括您自己在內的所有用戶的進程。然

6、而,這個列表并不會包括那些沒有控制終端的進程(比如那些在啟動時開始執行的進程、守護進程以及那些作為cron工作的一部分的進程)。要獲取所有正在運行的進程的列表,必須使用-A命令行選項(請參閱活單3)。活單3.列出BSDS統上的所有進程$ps-APIDTTSTATTIMECOMMAND1?Ss015.47/sbin/launchd23?Ss0:00.02/sbin/dynamic_pager-F/private/var/vm/swapfile27?Ss0:00.95kextd49?Ss0:05.17/usr/sbin/configd50?Ss001.89/usr/sbin/coreaudiod5

7、1?Ss004.40/usr/sbin/diskarbitrationd52?Ss0:00.08/usr/sbin/memberd-x53?Ss0:02.80/usr/sbin/securityd55?Ss1103.59/usr/sbin/notifyd57?Ss001.13/usr/sbin/DirectoryService.8051p2S+0:00.61sshrootbear292p3Ss0:00.02bash372p3S+0:00.42sshadminatuin312p4Ss+0:00.03bash332p5Ss0:00.03bash391p5S0:00.24/bin/bash9165p

8、5S+0:00.50emacs352p6Ss0:00.04bash476p6S0:01.04/bin/bash9299p6S0:00.09xterm9319p6S0:00.07xterm9423p6S0:00.14ftpatuin9520p6R+0:00.01ps-A9301p7Ss+0:00.01/usr/X11R6/bin/luit9302p8Ss+0:00.03bash9321p9Ss+000.01/usr/X11R6/bin/luit9322paSs+000.02bash-A命令行選項與同時使用-a和-x選項等效,其中-a顯示擁有控制終端的進程,-x顯示沒有控制終端的進程。在SVR彼種

9、中,顯示所有正在運行的進程(不論它是否擁有控制終端)的命令行選項是-e。從所顯示的進程來看,它和BSD的-A選項是等價的。可以在活單4中看到輸出的示例。活單4.SVR4環境中的進程列表$ps-ePIDTTYTIMECMD0?15:24sched1?0:00init2?0:00pageout3?0:00fsflush308?0:00devfsadm7?0:06svc.star9?010svc.conf506?0:00htt_serv260?0:00rpcbind259?0:00cron52?000dhcpagen282console0:00ttymon267?0:00lockd264?0:00s

10、tatd90?0:00sysevent.462?0:00smcboot464?0:00smcboot463?0:00smcboot473?0:00htt552?0:00in.telne527?000dmispd548?0:01snmpd輸出的區別在于所顯示的信息列,但是可以通過指定所需要的列來進行修改。列出指定信息ps工具包含許多標準的顯示列集。例如在SVR4中,經常使用ps-ef來獲取關于列出進程的更詳細的信息,包括父進程ID、處理器利用率、開始時間以及更詳細的命令行,如活單5所示。活單5.擴展輸出ps-efUIDPIDPPIDCSTIMETTYTIMECMDroot00015:56:26?

11、15:24schedroot10015:56:26?0:00/sbin/initroot2001556:26?0:00pageoutroot30015:56:26?0:00fsflushroot3081015:57:09?0:00devfsadmdroot71015:56:29?0:06/lib/svc/bin/svc.startd.root5621015:5817?000/usr/lib/sendmail-bd-q15mroot576555116:01:47pts/10:00ps-efroot4161015:5714?000/usr/sbin/syslogdsmmsp561101558:17

12、?000/usr/lib/sendmail-Ac-q15m.root552283015:5747?000/usr/sbin/in.telnetdroot5271015:5722?000/usr/lib/dmi/dmispdroot5481015:5724?001/usr/sfw/sbin/snmpd對于BSD環境,通常添加-l選項,它為每個進程產生"長"輸出,如活單6所示。活單6.在BSD顯示更詳細的信息$ps-alUIDPIDPPIDCPUPRINIVSZRSSWCHANSTATTTTIMECOMMAND091653910310578966376-S+p5000.50em

13、acs50135234903102778452-Ssp60:00.04bash0476352031027784600-Sp60:01.05/bin/bash092994760310449881880-Sp60:00.09xterm093194760310449881888-Sp60:00.07xterm09423476031027504488-Sp60:00.15ftpatuin09540476031027384504-R+p60:00.01ps-axl093019299031027332452-Ss+p7000.01/usr/X11R6/bin/luit0930293010310277848

14、88-Ss+p80:00.03bash093219319031027332452-Ss+p90:00.01/usr/X11R6/bin/luit093229321031027784888-Ss+pa0:00.02bash這些選項存在的問題是,盡管它們顯示了更多的信息,但這些信息并不總是特別有用,或者在尋找某個特定進程時包含了不希望看到的擾亂顯示的信息。幸運的是,所有版本的ps還包括了指定要顯示的列的功能。可以廣泛地使用這種命令,不管是僅提取所需要的信息,還是在異類環境中使用它來創造標準化的跨不同UNIX環境的輸出。要使用這一特性,可使用-o命令行選項,并列出要顯示的列,以逗號做列的分隔符。盡管

15、可選擇的歹0的范圍有一些差別,但在不同的UNIX版本中,大部分列都是標準的。例如,所有變種中都有pid、ppid(父進程ID)、commandRSS0主留集大小或內存使用情況)以及priority。使用時,可以用-o來選擇列及其顯示順序。例如,要獲取pid、ppid和commond在BSC可以使用-opid,ppid,command,如活單7所示,或者在SVR4中使用-opid,ppid,comm,如活單8所示。活單7.在BSD選擇特定的歹U$ps-opid,ppid,commandPIDPPIDCOMMAND391332/bin/bash9165391emacs活單8.在SVRk選擇特定的列

16、$ps-opid,ppid,commPIDPPIDCOMMAND555552-sh622555ps選擇了想要的列后,可能會選擇信息的排列順序。ps的缺省設置是根據進程ID來排列進程列表,但是這樣可能會隱藏正在查找的信息。當查找內存饑餓的進程時,按內存使用量來排列顯示結果比按進程ID更加有用。有些ps變種通過使用命令行選項來支持這種情況。BS攻種中使用-m選項來按內存使用情況排序,或者使用-r來按CPLK用情況排序。許多SVR4變種沒有該問題的明確解決辦法,但是可以在所有環境中通過將ps和sort進行組合來生成類似的結果。例如,要獲取按CPUS用量排序的進程列表,可以在BSD中使用活單9所示的命

17、令。活單9.在BS5跟蹤CPU吏用情況$ps-A-opid,%cpu,command|sort-n+1.3580.1ftp114250.1/bin/bash286840.3trivial-rewrite-nrewrite-tunix-u3560.4ssh3540.5as239881.1emacs13614.6cc1plus2630623.6cpp在SVR4中,需要將cpu改為pcpu,而該命令在其他方面是相同的(請參見活單10)。活單10.在SVR4中跟蹤CPU®用情況$ps-e-opid,pcpu,comm|sort-n+1.30.1fsflush5550.1-sh6270.2so

18、rt6280.2ps該命令鏈是可行的,因為已經指定了進程列表的排列順序,因此可以按照這些列進行排序以獲取真正想要的信息。如果想使用不同的標準來查找進程,還有其他的可用方案。列出特定進程顯然,在獲取了正在運行的進程列表之后,也許希望列出特定的進程。一個顯而易見的方法就是將ps的輸出與grep結合起來,以提取所需的信息。在一些UNIX變種中,可以通過一些特定的實用程序來完成這項工作,例如pgrep,但是如果要查找一些特定的命令,使用grep也同樣是很有效的。$ps-ef|grepbashps命令還支持根據更明確的標準來顯示進程,例如用戶ID、父進程或控制終端。例如,-U命令行選項限定了進程列表只顯

19、示指定用戶名的進程。例如,要顯示當前屆于root用戶的進程,請參閱活單11。活單11.根據用戶列出進程$ps-UrootPIDTTYTIMECMD0?15:24sched1?0:00init2?000pageout3?0:02fsflush308?0:00devfsadm7?0:06svc.star.552?0:00in.telne527?0:00dmispd629pts/10:00ps548?001snmpd要獲取指定終端的所有進程,使用-t,如活單12所示。活單12.根據終端列出進程$ps-t3PIDTTYTIMECMD19915pts/300:00:00bash29145pts/300:

20、00:00emacs32256pts/300:00:00emacs在有了這些信息后,也許想要用它來對進程進行相應的操作。向多個線程發送信號當找到了要查詢的進程后,最常用的命令之一是kill。它向一個或多個進程發送特定的信號。對于啟動了多個線程或子線程的守護進程的情況,可以嘗試向父進程發送信號,以此向所有的進程發送信號。然而,這種方法并不是對所有的守護進程和應用程序都有效。顯然,您希望避免手動挑選出這些進程。有些UNIX變種中有一個名為pkill的工具,它能夠向滿足特定模式或其他標準的進程(例如終端、進程組、用戶ID以及組ID歹0表)發送相同的信號。可以通過鏈接ps、grep、awk、xargs

21、以及kill命令的方式來模擬這一基本操作,向滿足特定命令模式的多個進程發送信號。例如,要向所有命令中包含"httpd"的進程發送kill信號,可以使用:$ps-e-opid,command|grephttpd|awk'print'|xargskill-9如果對單個元素進行研究,將更容易理解它。$ps-e-opid,command該命令顯示了所有正在運行的進程的列表(這是在SVR4系統中,而在BS5則應使用-A)。它僅顯示了進程ID和被執行的命令。不需要任何其他的信息,而且使用更詳細的輸出可能會引入其他方面符合搜索條件的文本。$ps-e-opid,comman

22、d|grephttpd該命令僅提取了命令中含有httpd的進程(因為進程列表中產生的唯一其他信息是進程ID):$ps-e-opid,command|grephttpd|awk'print'通過使用awk,僅篩選除去打印輸出中的第一個參數,即進程ID。$ps-e-opid,command|grephttpd|awk'(print'|xargskill-9xargs命令接收空白字符分隔的項目列表(其中空白字符包括回車、換行、制表符以及一個或多個空格),并把它格式化為參數歹0表傳遞給指定的命令,在本示例中是kill命令。最好把它放進腳本程序中,并取一個適當的名字,例如

23、(pkill或者killbyname)。可以設置該腳本接收兩個參數,信號和匹配文本,甚至還可以考慮操作系統的差別,如活單13所示。活單13.通過命令字符申向進程發送消息#!/bin/shHOSTTYPE='uname-s'SIGNAL=STRING=if-z""-o-z""thenechoUsage:messagesignalstringexit1ficase$HOSTTYPEinDarwin|BSD)ps-a-opid,command|grep$STRING|awk'print;'|xargskill$SIGNAL;Li

24、nux|Solaris|AIX|HP-UX)ps-e-opid,command|grep$STRING|awk'print;'|xargskill$SIGNAL;esac這里所顯示的基本技術可以用于其他類似的排序規則。計算內存使用情況ps工具還提供了我們目前尚未涉及的兩個列。RS澎0提供了進程的"駐留集大小”,這是該進程所使用的物理內存量,也是進程占用多少實際內存的指示。VSZ列詳細列出進程正在使用的內存總量,包括所分配的內部存儲,但通常已被交換到磁盤。對于大多數ps變體而言,這兩個列都是比較常用的。確定這兩個數據能夠更好地了解內存的使用情況。如果將ps與grep組合

25、起來選擇特定的進程,并使用awk來計算總量,就可以獲取單個應用程序或者某個應用程序及其子進程正占用多少物理內存和虛擬內存。例如,要確定bash進程所使用的物理內存和虛擬內存,可以使用活單14中的命令。活單14.使用ps和awk計算內存使用情況$ps-A-orss,vsz,command|grepbash|awk'(rss+=;vsz+=ENDprint"Real:",rss,"Virtual:",vsz'Real:4004Virtual:305624這在診斷內存和交換區使用情況的問題時特別有用。使用與作業控制兼容的Shell對于一個典型的

26、系統管理員來說,在任一時刻運行一或兩個以上的特定任務是很平常的事。盡管在任何時刻與服務器的連接可能不止一個,不論是多終端窗口(例如通過xterm)還是其他的終端,或者通過SSHTelnet的遠程連接,有時候需要在活動的Shell或者環境中控制或監視多個進程。所有的Shell都支持在命令的末尾附加連字符(&)來使命令自動在后臺運行。但有時希望將一個交互應用程序(如一個編輯器)放到后臺,以便可以運行一個Shell命令,然后返回到編輯器會話。這種控制后臺進程的能力稱為作業控制,它是KornShell、CShell以及開源的Shell(例如bash和zsh)的標準特性。為了實現在Shell中每

27、次啟動一個命令時在后臺運行的基本作業控制,命令(可以是任何合法的命令行,甚至是內聯腳本)給出了作業引用ID。$find/-name"core"/tmp/corelist2&1&311957可以使用jobs命令獲取正在后臺運行的作業列表,如活單15所示。活單15.使用jobs命令$jobs1 -StoppedemacsMCSLP/Intranet/News.pm2 +StoppedemacsMCSLP/Intranet/Media.pm3 Runningfind/-name"core"/tmp/corelist2&1&在該活

28、單中,第二個emacs命令使用了+號標注。這表示Shell認為它是當前的活動作業。先前啟動的find不是活動的工作,因為它不需要進行交互(盡管它產生輸出,它并不需要輸入來繼續),因而不是活動的進程。第一個emacs進程使用了-標注,說明Shell認為它先前是活動的命令。可以分別使用棄日4符申來引用這些作業。可以通過在fg后輸入作業編號或者作業字符申(+、-)來將任何正在運行的作業切換為前臺進程。如果省略了引用,Shell就切換到當前的活動工作。要掛起當前運行的進程,按Control-Z。可以使用下面的代碼進行重新配置:ftp3+Stoppedftpatuin它可以和許多不同的命令及應用程序一起使用。對于在Shell中運行的大部分簡單命令,如ls或者find,它也應該是有效的。請注意,該作業

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論