Unix操作系統(tǒng)進(jìn)程管理
大家知道進(jìn)程是Unix操作系統(tǒng)的是守護(hù)神??稍谌蝿?wù)已經(jīng)執(zhí)行完成了,但是卻沒有正常結(jié)束進(jìn)程。又或者進(jìn)程無緣無故占用了大量的系統(tǒng)資源,導(dǎo)致系統(tǒng)速度減慢,影響了其他作業(yè)的正常運(yùn)行。對于這些不服管教的進(jìn)程,系統(tǒng)工程師只能夠拿起手中的屠刀,實行“殺無赦”政策。下面,我們來學(xué)習(xí)2種方法來解決這個問題。
通過父進(jìn)程來殺死子進(jìn)程。
在Unix操作系統(tǒng)中,進(jìn)程有父子進(jìn)程的關(guān)系。某個進(jìn)程可能會創(chuàng)建另外一個進(jìn)程,這個創(chuàng)建者就是父進(jìn)程,而新建立的進(jìn)程就是子進(jìn)程。通常情況下,Unix操作系統(tǒng)如果停止了一個父進(jìn)程,則該父進(jìn)程產(chǎn)生的所有子進(jìn)程都將自動終止。但是,這個過程可能會破壞數(shù)據(jù)文件或者其他一些難以預(yù)料的結(jié)果。故正常情況下,筆者是建議系統(tǒng)工程師先關(guān)閉掉所有的子進(jìn)程,然后再關(guān)閉父進(jìn)程。
但是,當(dāng)采取了任何手段,包括kill -9手段之后仍然無法正常殺死頑固進(jìn)程之后,Unix操作系統(tǒng)工程師只好采用這個終極殺手,即通過關(guān)閉父進(jìn)程來自動關(guān)閉不聽話的子進(jìn)程。
但是,正如上面所說的,這很可能會導(dǎo)致一些連鎖反映。所以在采用這種方式之前,系統(tǒng)工程師還是要預(yù)先估計一下可能會帶來的后果。如可以把這個父進(jìn)程所產(chǎn)生的子進(jìn)程能夠關(guān)閉的先關(guān)閉掉。然后再通過殺死父進(jìn)程來自動終止子進(jìn)程。這可以把對操作系統(tǒng)的不利影響降低到最低。
利用系統(tǒng)注銷功能來關(guān)閉殺不掉的進(jìn)程。
若通過關(guān)閉父進(jìn)程仍然殺不死子進(jìn)程的話,那么管理員還可以通過注銷系統(tǒng)的方式來殺死進(jìn)程。這就好象Windows系統(tǒng)注銷一樣,會關(guān)閉當(dāng)前的所有進(jìn)程與任務(wù)。不過有時候系統(tǒng)工程師可能不想關(guān)閉所有的進(jìn)程,如一些關(guān)系到服務(wù)器運(yùn)行的進(jìn)程。此時,系統(tǒng)工程師在注銷Unix操作系統(tǒng)之前,需要采取一定的手段,讓系統(tǒng)注銷后仍然能夠保持某些進(jìn)程正常運(yùn)轉(zhuǎn)。
如果系統(tǒng)工程師想在系統(tǒng)注銷后仍然執(zhí)行一個或者多個進(jìn)程,則可以采用nohup命令。如此設(shè)置后,即使在系統(tǒng)注銷后,在后臺執(zhí)行的進(jìn)程仍然可以繼續(xù)執(zhí)行,不會終止。這個手段就可以把系統(tǒng)注銷對于用戶的不利影響降低到最低。如果Unix操作系統(tǒng)是企業(yè)中的一臺服務(wù)器,而不是客戶端,那么這個特性將會對企業(yè)很有利。
nohup命令運(yùn)行由Command參數(shù)和任何相關(guān)的Arg參數(shù)指定的命令,而忽略所有掛斷信號。為此在系統(tǒng)注銷后仍然可以使用nohup命令運(yùn)行后臺中的程序。注意無論是否將 nohup命令的輸出重定向到終端,輸出都將附加到當(dāng)前目錄的nohup.out 文件中。如果當(dāng)前目錄的nohup.out文件不可寫,則輸出重定向到$HOME/nohup.out 文件中。
如果上面這些文件都不可以用的話,那么Command參數(shù)指定的命令不可調(diào)用。故系統(tǒng)工程師如果事后要查看這些Unix操作系統(tǒng)注銷后仍然運(yùn)行在后臺進(jìn)程的結(jié)果,就可以依次查看以上這兩個文件。
Unix操作系統(tǒng)注銷后,通常再頑固的進(jìn)程都會被殺死掉。不過有時候會因為進(jìn)程實在難纏,注銷的過程時間可能會比較長。若操作系統(tǒng)在長時間后仍然無法注銷的話,那只有強(qiáng)制重新啟動電腦了。不過重新啟動后很可能會出現(xiàn)啟動故障。
重新啟動系統(tǒng)來終止進(jìn)程是不得已而為止的做法了。所以,我們盡量不要選擇這個方法,希望大家都能夠提高自己的Unix操作系統(tǒng)的操作水平。
【編輯推薦】