時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
??進程是Unix系統(tǒng)的是守護神??墒怯袝r候這個守護神也會鬧別扭,會跟Unix操作系統(tǒng)作對。如明明任務已經(jīng)執(zhí)行完成了,但是卻沒有正常結(jié)束進程。又或者進程無緣無故占用了大量的系統(tǒng)資源,導致系統(tǒng)速度減慢,影響了其他作業(yè)的正常運行。對于這些不服管教的進程,系統(tǒng)工程師只能夠拿起手中的屠刀,實行"殺無赦"政策。
??在Unix系統(tǒng)中有多種手段可以殺死這些異常的進程。通常情況下,筆者建議是殺進程的工作要有序的進行,盡量采取一些對操作系統(tǒng)影響小的方法。
??第一階段:在本機上殺死進程。
??系統(tǒng)工程師可以直接在Unix系統(tǒng)的命令中斷采用相關的命令來殺死異常進程。如可以按鍵盤上的DEL鍵、Ctrl+D鍵、Break鍵等等殺死進程。系統(tǒng)工程師按下這些鍵的任何一個,都會向系統(tǒng)進程發(fā)送中斷信號。注意,通常情況下只有root用戶才能夠殺死其他擁護的進程或者系統(tǒng)進程;而其他用戶只能夠殺死自己的進程。如現(xiàn)在Unix系統(tǒng)中要部署一個Oracle數(shù)據(jù)庫服務器。為了管理方便,Unix系統(tǒng)工程師建立了一個Oracle用戶,用來進行數(shù)據(jù)庫系統(tǒng)的維護與管理。此時,Oracle這個用戶就會運行幾個進程,如tns等進程。正常情況下,Oracle用戶以及root用戶都可以殺死這個進程。但是如果這個系統(tǒng)中還有其他用戶,則無法殺死這個進程。
??另外如果用戶想殺的進程是shell的子進程,則還可以采用kill命令家進程的作業(yè)號的方式。如kill % 作業(yè)號等等。Shell是Unix系統(tǒng)中很好的一個交互工具,也有人把它叫做命令行界面,是Unix操作系統(tǒng)下最傳統(tǒng)、歷史最悠久的用戶和計算機的交互截面。系統(tǒng)管理員可以在這里直接輸入相關的命令來執(zhí)行各種各樣的維護任務,包括殺死異常進程等等。其實它跟微軟操作系統(tǒng)下的命令行界面很相似,不過也有一些差異的地方。如Unix操作系統(tǒng)下的shell既是用戶與系統(tǒng)交互的界面,也是控制系統(tǒng)的腳本語言。這就是兩者最大的差異。Shell做重要的特點就是隱藏了操作系統(tǒng)的底層細節(jié),故對于工程師來說這是首選的維護系統(tǒng)的工具。
??其實大部分時候工程師都是在shell環(huán)境下管理進程,包括上篇文章中談到的查看進程信息、把后臺進程調(diào)到前臺等等。故在本機上殺死進程也大部分是在shel環(huán)境下進行。為此系統(tǒng)工程師用的更多的可能還是利用kill命令來殺死shell子進程。
??第二階段:從另一個終端來殺進程。
??有時候可能進程比較頑固,若從當前終端來殺它的話,還殺不掉。此時管理員就可以通過曲線救國的方式,從另一個終端登陸到Unix操作系統(tǒng),然后采用kill命令來殺死異常進程。這個主要的步驟如下。
?第一步從另一個終端登陸操作系統(tǒng)。通常情況下,Unix系統(tǒng)支持多個終端。當系統(tǒng)工程師發(fā)現(xiàn)在當前終端無法殺死某個進程的話,則不用急于通過重新啟動或者強制關機等方式來殺死這些殺不掉的進程。這是下下之策。遇到這種情況,系統(tǒng)工程師可以從另外一個終端登陸到操作系統(tǒng),然后嘗試使用kill命令來殺死進程。
??第二步使用ps –u命令來查找需要殺死進程所對應的進程號或者作業(yè)號。ps 命令將活動進程的當前狀態(tài)和有關的內(nèi)核線程寫到標準輸出中。這個命令有很多參數(shù),如-m、-l、s、u 和 v等等。注意當采用-m參數(shù)時則系統(tǒng)將使用額外的行顯示與進程相關的線程。不帶任何參數(shù)時,ps 命令將會顯示關于當前工作站的信息。而使用-o參數(shù)時,ps命令檢查內(nèi)存或調(diào)頁區(qū)域并確定進程創(chuàng)建時的命令名和參數(shù)是什么。如果 ps 命令不能找到該信息,存儲在內(nèi)核中的命令名顯示在方括號中。如果想快速查找特定作業(yè)的進程信息,采用-u參數(shù)是不錯的選擇。如ps –u oracle 等等。
??第三步使用kill命令殺死異常進程,如kill 26014。Kill命令就會向目標進程發(fā)送一個信號以中斷這個進程。通常情況下,此時就可以殺死那些比較頑固的進程。如果在kill命令后面沒有加上進程號或者作業(yè)號,則系統(tǒng)會采用默認的信號值15,這是一個終止命令。如果此時還沒有殺死這個進程的話,那么可以采用更強烈的方式,即kill -9 進程號。對于頑固進程來說,這條命令可能會更加有用。這主要是因為這個命令使進程在接收到中斷信號后,不能關閉它在使用的任何文件。正是因為有這個后遺癥,故只有在采用上面那幾種手段無效的情況下,才推薦使用這個終極殺手。
??第三階段:通過父進程來殺死子進程。
??在unix操作系統(tǒng)中,進程有父子進程的關系。某個進程可能會創(chuàng)建另外一個進程,這個創(chuàng)建者就是父進程,而新建立的進程就是子進程。通常情況下,如果停止了一個父進程,則該父進程產(chǎn)生的所有子進程都將自動終止。但是,這個過程可能會破壞數(shù)據(jù)文件或者其他一些難以預料的結(jié)果。故正常情況下,筆者是建議系統(tǒng)工程師先關閉掉所有的子進程,然后再關閉父進程。
??但是,當采取了任何手段,包括kill -9手段之后仍然無法正常殺死頑固進程之后,系統(tǒng)工程師只好采用這個終極殺手,即通過關閉父進程來自動關閉不聽話的子進程。但是,正如上面所說的,這很可能會導致一些連鎖反映。所以在采用這種方式之前,系統(tǒng)工程師還是要預先估計一下可能會帶來的后果。如可以把這個父進程所產(chǎn)生的子進程能夠關閉的先關閉掉。然后再通過殺死父進程來自動終止子進程。這可以把對操作系統(tǒng)的不利影響降低到最低。
??第四階段:利用系統(tǒng)注銷功能來關閉殺不掉的進程。
??若通過關閉父進程仍然殺不死子進程的話,那么管理員還可以通過注銷系統(tǒng)的方式來殺死進程。這就好象Windows系統(tǒng)注銷一樣,會關閉當前的所有進程與任務。不過有時候系統(tǒng)工程師可能不想關閉所有的進程,如一些關系到服務器運行的進程。此時,系統(tǒng)工程師在注銷系統(tǒng)之前,需要采取一定的手段,讓系統(tǒng)注銷后仍然能夠保持某些進程正常運轉(zhuǎn)。如果系統(tǒng)工程師想在系統(tǒng)注銷后仍然執(zhí)行一個或者多個進程,則可以采用nohup命令。如此設置后,即使在系統(tǒng)注銷后,在后臺執(zhí)行的進程仍然可以繼續(xù)執(zhí)行,不會終止。這個手段就可以把系統(tǒng)注銷對于用戶的不利影響降低到最低。如果Unix操作系統(tǒng)是企業(yè)中的一臺服務器,而不是客戶端,那么這個特性將會對企業(yè)很有利。
??nohup命令運行由Command參數(shù)和任何相關的Arg參數(shù)指定的命令,而忽略所有掛斷信號。為此在系統(tǒng)注銷后仍然可以使用nohup命令運行后臺中的程序。注意無論是否將 nohup命令的輸出重定向到終端,輸出都將附加到當前目錄的nohup.out 文件中。如果當前目錄的nohup.out文件不可寫,則輸出重定向到$HOME/nohup.out 文件中。如果上面這些文件都不可以用的話,那么Command參數(shù)指定的命令不可調(diào)用。故系統(tǒng)工程師如果事后要查看這些系統(tǒng)注銷后仍然運行在后臺進程的結(jié)果,就可以依次查看以上這兩個文件。
??操作系統(tǒng)注銷后,通常再頑固的進程都會被殺死掉。不過有時候會因為進程實在難纏,注銷的過程時間可能會比較長。若操作系統(tǒng)在長時間后仍然無法注銷的話,那只有強制重新啟動電腦了。不過重新啟動后很可能會出現(xiàn)啟動故障。為此,重新啟動系統(tǒng)來終止進程是不得已而為止的做法了。??
關鍵詞標簽:Unix操作系統(tǒng)
相關閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內(nèi)存型號 linux tc實現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關機、重啟、注銷 命令 查看linux服務器硬盤IO讀寫負載