新聞中心
linux進(jìn)程:假死的恐怖

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


咨詢
建站咨詢
