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