新聞中心
linux進程:假死的恐怖

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、鼓樓網(wǎng)站維護、網(wǎng)站推廣。
Linux進程可以提高工作效率,但是如果它出現(xiàn)“假死”狀態(tài),則會給用戶帶來巨大的麻煩和恐懼。所謂假死,就是進程獨占系統(tǒng)資源,出現(xiàn)不更新狀態(tài)的問題,以至于用戶無法得到期望的結(jié)果,這在Linux系統(tǒng)中非常常見。
Linux的假死一般是由進程死鎖引起的。死鎖就是多個進程因爭奪相同的資源而牽連在一起,從而導(dǎo)致某一個進程一直占有系統(tǒng)資源的狀態(tài)。例如,當兩個進程分別調(diào)用函數(shù):pthread_mutex_lock (p1) 和 pthread_mutex_lock (p2),同時嘗試訪問這兩個互斥量,此時就可能發(fā)生死鎖。因為 p1和 p2 互相等待對方釋放資源,沒有一個能夠得到資源,從而發(fā)生“假死”狀態(tài)。
此外,其他系統(tǒng)調(diào)用也有可能導(dǎo)致假死,比如磁盤IO操作、系統(tǒng)中斷和上下文切換失敗。
解決Linux假死問題的一個基本辦法是重置或重啟進程。另一種更安全的做法是分析假死的代碼,嘗試找到引發(fā)死鎖的原因并進行優(yōu)化調(diào)整。例如,在上述示例中,使用pthread_mutex_trylock函數(shù)可以有效避免進程死鎖:
/* 之前分析可能存在死鎖的地方 */
if ( -1 == pthread_mutex_lock (p1))
{
/*得到p1之前要嘗試用pthread_mutex_trylock獲取鎖,若失敗再嘗試其他方法 */
/* Get p1, try to get lock with pthread_mutex_trylock first, if it fails, try other methods. */
if ( 0 == pthread_mutex_trylock (p1))
{
/* 獲取p1成功 */
/* Got p1 successfully. */
}
else
{
/* 獲取p1失敗,則嘗試其他方法,以避免死鎖 */
/* Failed to get p1, try other methods to avoid deadlock. */
}
}
此外,在實際開發(fā)中,可以不使用多線程,而是使用fork()函數(shù)來創(chuàng)建子進程,從而消除進程死鎖引起假死的風(fēng)險。
總而言之,Linux進程出現(xiàn)假死狀態(tài)會帶來很大的困擾和恐懼,針對此
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計算機網(wǎng)絡(luò)、設(shè)計、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
名稱欄目:Linux進程:假死的恐怖(linux進程假死)
轉(zhuǎn)載源于:http://www.fisionsoft.com.cn/article/dpgsicj.html


咨詢
建站咨詢
