Unix操作系統(tǒng)進(jìn)程關(guān)閉方法
其實(shí)在Unix操作系統(tǒng)中有多種手段可以殺死這些異常的進(jìn)程。通常情況下,我們建議是殺進(jìn)程的工作要有序的進(jìn)行,盡量采取一些對(duì)操作系統(tǒng)影響小的方法。在這里,我們來介紹2種方法,大家一起來學(xué)習(xí)下吧。
在本機(jī)上殺死進(jìn)程
系統(tǒng)工程師可以直接在Unix操作系統(tǒng)的命令中斷采用相關(guān)的命令來殺死異常進(jìn)程。如可以按鍵盤上的DEL鍵、Ctrl+D鍵、Break鍵等等殺死進(jìn)程。系統(tǒng)工程師按下這些鍵的任何一個(gè),都會(huì)向系統(tǒng)進(jìn)程發(fā)送中斷信號(hào)。注意,通常情況下只有root用戶才能夠殺死其他擁護(hù)的進(jìn)程或者系統(tǒng)進(jìn)程;而其他用戶只能夠殺死自己的進(jìn)程。
如現(xiàn)在Unix操作系統(tǒng)中要部署一個(gè)Oracle數(shù)據(jù)庫服務(wù)器。為了管理方便,Unix操作系統(tǒng)工程師建立了一個(gè)Oracle用戶,用來進(jìn)行數(shù)據(jù)庫系統(tǒng)的維護(hù)與管理。此時(shí),Oracle這個(gè)用戶就會(huì)運(yùn)行幾個(gè)進(jìn)程,如tns等進(jìn)程。正常情況下,Oracle用戶以及root用戶都可以殺死這個(gè)進(jìn)程。但是如果這個(gè)系統(tǒng)中還有其他用戶,則無法殺死這個(gè)進(jìn)程。
另外如果用戶想殺的進(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)、歷史最悠久的用戶和計(jì)算機(jī)的交互截面。
系統(tǒng)管理員可以在這里直接輸入相關(guān)的命令來執(zhí)行各種各樣的維護(hù)任務(wù),包括殺死異常進(jìn)程等等。其實(shí)它跟微軟操作系統(tǒng)下的命令行界面很相似,不過也有一些差異的地方。如Unix操作系統(tǒng)下的shell既是用戶與系統(tǒng)交互的界面,也是控制系統(tǒng)的腳本語言。這就是兩者最大的差異。Shell做重要的特點(diǎn)就是隱藏了操作系統(tǒng)的底層細(xì)節(jié),故對(duì)于工程師來說這是首選的維護(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命令來殺死shell子進(jìn)程。
從另一個(gè)終端來殺進(jìn)程
有時(shí)候可能進(jìn)程比較頑固,若從當(dāng)前終端來殺它的話,還殺不掉。此時(shí)管理員就可以通過曲線救國的方式,從另一個(gè)終端登陸到Unix操作系統(tǒng),然后采用kill命令來殺死異常進(jìn)程。這個(gè)主要的步驟如下。
第一步從另一個(gè)終端登陸操作系統(tǒng)。通常情況下,Unix操作系統(tǒng)支持多個(gè)終端。當(dāng)系統(tǒng)工程師發(fā)現(xiàn)在當(dāng)前終端無法殺死某個(gè)進(jìn)程的話,則不用急于通過重新啟動(dòng)或者強(qiáng)制關(guān)機(jī)等方式來殺死這些殺不掉的進(jìn)程。這是下下之策。遇到這種情況,系統(tǒng)工程師可以從另外一個(gè)終端登陸到操作系統(tǒng),然后嘗試使用kill命令來殺死進(jìn)程。
第二步使用ps –u命令來查找需要?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)核線程寫到標(biāo)準(zhǔn)輸出中。這個(gè)命令有很多參數(shù),如-m、-l、s、u 和 v等等。
注意當(dāng)采用-m參數(shù)時(shí)則系統(tǒng)將使用額外的行顯示與進(jìn)程相關(guān)的線程。不帶任何參數(shù)時(shí),ps 命令將會(huì)顯示關(guān)于當(dāng)前工作站的信息。而使用-o參數(shù)時(shí),ps命令檢查內(nèi)存或調(diào)頁區(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命令后面沒有加上進(jìn)程號(hào)或者作業(yè)號(hào),則系統(tǒng)會(huì)采用默認(rèn)的信號(hào)值15,這是一個(gè)終止命令。
如果此時(shí)還沒有殺死這個(gè)進(jìn)程的話,那么可以采用更強(qiáng)烈的方式,即kill -9 進(jìn)程號(hào)。對(duì)于頑固進(jìn)程來說,這條命令可能會(huì)更加有用。這主要是因?yàn)檫@個(gè)命令使進(jìn)程在接收到中斷信號(hào)后,不能關(guān)閉它在使用的任何文件。正是因?yàn)橛羞@個(gè)后遺癥,故只有在采用上面那幾種手段無效的情況下,才推薦使用這個(gè)終極殺手。
使用這2個(gè)方法,我們就可以關(guān)閉Unix操作系統(tǒng)中不友好的進(jìn)程了。希望大家可以好好的學(xué)習(xí)Unix操作系統(tǒng)的知識(shí)。
【編輯推薦】