linux 挂起 移动电脑,linux 系统挂起
盡管內(nèi)核代碼的大部分 bug 以 oops 消息結(jié)束, 有時(shí)候它們可能完全掛起系統(tǒng). 如果系 統(tǒng)掛起, 沒(méi)有消息打印. 例如, 如果代碼進(jìn)入一個(gè)無(wú)限循環(huán), 內(nèi)核停止調(diào)度,[15]15?并且系 統(tǒng)不會(huì)響應(yīng)任何動(dòng)作, 包括魔術(shù) Ctrl-Alt-Del 組合鍵. 你有 2 個(gè)選擇來(lái)處理系統(tǒng)掛起-
- 或者事先阻止它們, 或者能夠事后調(diào)試它們.
你可阻止無(wú)限循環(huán)通過(guò)插入 schedule 引用在戰(zhàn)略點(diǎn)上. schedule 調(diào)用( 如你可能猜到 的 )調(diào)度器, 因此, 允許別的進(jìn)程從當(dāng)前進(jìn)程偷取 CPU 數(shù)據(jù). 如果一個(gè)進(jìn)程由于你的驅(qū) 動(dòng)的 bug 而在內(nèi)核空間循環(huán), schedule 調(diào)用使你能夠殺掉進(jìn)程在跟蹤發(fā)生了什么之后.
你應(yīng)當(dāng)知道, 當(dāng)然, 如何對(duì) schedule 的調(diào)用可能創(chuàng)造一個(gè)附加的重入調(diào)用源到你的驅(qū)動(dòng), 因?yàn)樗试S別的進(jìn)程運(yùn)行. 這個(gè)重入正常地不應(yīng)當(dāng)是問(wèn)題, 假定你在你的驅(qū)動(dòng)中已經(jīng)使用 了合適的加鎖. 然而, 要確認(rèn)在你的驅(qū)動(dòng)持有一個(gè)自旋鎖的任何時(shí)間不能調(diào)用 schedule.
如果你的驅(qū)動(dòng)真正掛起了系統(tǒng), 并且你不知道在哪里插入 schedule 調(diào)用, 最好的方式是 加入一些打印消息并且寫(xiě)到控制臺(tái)(如果需要, 改變 console_loglevel 值).
有時(shí)候系統(tǒng)可能看來(lái)被掛起, 但是沒(méi)有. 例如, 這可能發(fā)生在鍵盤(pán)以某個(gè)奇怪的方式保持 鎖住的時(shí)候. 這些假掛起可通過(guò)查看你為此目的運(yùn)行的程序的輸出來(lái)檢測(cè). 一個(gè)你的顯示 器上的時(shí)鐘或者系統(tǒng)負(fù)載表是一個(gè)好的狀態(tài)監(jiān)控器; 只要他繼續(xù)更新, 調(diào)度器就在工作.
對(duì)許多的上鎖一個(gè)必不可少的工具是"魔術(shù) sysrq 鍵", 在大部分體系上都可用. 魔鍵 sysrq 是 PC 鍵盤(pán)上 alt 和 sysrq 鍵組合來(lái)發(fā)出的, 或者在別的平臺(tái)上使用其他特殊鍵 (詳見(jiàn) documentation/sysrq.txt), 在串口控制臺(tái)上也可用. 一個(gè)第三鍵, 與這 2 個(gè)一 起按下, 進(jìn)行許多有用的動(dòng)作中的一個(gè):
r 關(guān)閉鍵盤(pán)原始模式; 用在一個(gè)崩潰的應(yīng)用程序( 例如 X 服務(wù)器 )可能將你的鍵盤(pán)搞成 一個(gè)奇怪的狀態(tài).
k 調(diào)用"安全注意鍵"( SAK ) 功能. SAK 殺掉在當(dāng)前控制臺(tái)的所有運(yùn)行的進(jìn)程, 給你一個(gè) 干凈的終端.
s 進(jìn)行一個(gè)全部磁盤(pán)的緊急同步.
u umount. 試圖重新加載所有磁盤(pán)在只讀模式. 這個(gè)操作, 常常在 s 之后馬上調(diào)用, 可 以節(jié)省大量的文件系統(tǒng)檢查時(shí)間, 在系統(tǒng)處于嚴(yán)重麻煩時(shí).
b boot. 立刻重啟系統(tǒng). 確認(rèn)先同步和重新加載磁盤(pán). p 打印處理器消息.
t 打印當(dāng)前任務(wù)列表. m 打印內(nèi)存信息.
實(shí)際上, 多處理器系統(tǒng)仍然在其他處理器上調(diào)度, 甚至一個(gè)單處理器的機(jī)器可能重新調(diào)度, 如果內(nèi)核搶占被使能.
然而, 對(duì)于大部分的通常的情況( 單處理器不使能搶占), 系統(tǒng)一起停止調(diào)度.
有別的魔術(shù) sysrq 功能存在; 完整內(nèi)容看內(nèi)核源碼的文檔目錄中的 sysrq.txt. 注意魔 術(shù) sysrq 必須在內(nèi)核配置中顯式使能, 大部分的發(fā)布沒(méi)有使能它, 因?yàn)槊黠@的安全理由. 對(duì)于用來(lái)開(kāi)發(fā)驅(qū)動(dòng)的系統(tǒng), 然而, 使能魔術(shù) sysrq 值得為它自己建立一個(gè)新內(nèi)核的麻煩. 魔術(shù) sysrq 可能在運(yùn)行時(shí)關(guān)閉,
使用如下的一個(gè)命令:
echo 0 > /proc/sys/kernel/sysrq
如果非特權(quán)用戶能夠接觸你的系統(tǒng)鍵盤(pán), 你應(yīng)當(dāng)考慮關(guān)閉它, 來(lái)阻止有意或無(wú)意的損壞. 一些以前的內(nèi)核版本缺省關(guān)閉 sysrq, 因此你需要在運(yùn)行時(shí)使能它, 通過(guò)向同樣的
/proc/sys 文件寫(xiě)入 1.
sysrq 操作是非常有用, 因此它們已經(jīng)對(duì)不能接觸到控制臺(tái)的系統(tǒng)管理員可用. 文件
/proc/sysrq-trigger 是一個(gè)只寫(xiě)的入口點(diǎn), 這里你可以觸發(fā)一個(gè)特殊的 sysrq 動(dòng)作, 通過(guò)寫(xiě)入關(guān)聯(lián)的命令字符; 接著你可收集內(nèi)核日志的任何輸出數(shù)據(jù). 這個(gè) sysrq 的入口 點(diǎn)是一直工作的, 即便 sysrq 在控制臺(tái)上被關(guān)閉.
如果你經(jīng)歷一個(gè)"活掛",
就是你的驅(qū)動(dòng)粘在一個(gè)循環(huán)中, 但是系統(tǒng)作為一個(gè)整體功能正常, 有幾個(gè)技術(shù)值得了解. 經(jīng)常地, sysrq p 功能直接指向出錯(cuò)的函數(shù). 如果這個(gè)不行, 你還 可以使用內(nèi)核剖析功能.
建立一個(gè)打開(kāi)剖析的內(nèi)核, 并且用命令行中 profile=2 來(lái)啟動(dòng) 它. 使用 readprofile 工具復(fù)位剖析計(jì)數(shù)器, 接著使你的驅(qū)動(dòng)進(jìn)入它的循環(huán). 一會(huì)兒后,
使用 readprofile 來(lái)看內(nèi)核在哪里消耗它的時(shí)間. 另一個(gè)更高級(jí)的選擇是 oprofile, 你 可以也考慮下. 文件
documentation/basic_profiling.txt 告訴你啟動(dòng)剖析器所有需要 知道的東西.
在追逐系統(tǒng)掛起時(shí)一個(gè)值得使用的防范措施是以只讀方式加載你的磁盤(pán)(或者卸載它們). 如果磁盤(pán)是只讀或者卸載的, 就沒(méi)有風(fēng)險(xiǎn)損壞文件系統(tǒng)或者使它處于不一致的狀態(tài). 另外 的可能性是使用一個(gè)通過(guò) NFS, 網(wǎng)絡(luò)文件系統(tǒng), 來(lái)加載它的全部文件系統(tǒng)的計(jì)算機(jī), 內(nèi)核 的"NFS-Root"功能必須打開(kāi), 在啟動(dòng)時(shí)必須傳遞特殊的參數(shù). 在這個(gè)情況下, 即便不依靠 sysrq 你也會(huì)避免文件系統(tǒng)破壞, 因?yàn)槲募到y(tǒng)的一致有 NFS 服務(wù)器來(lái)管理, 你的設(shè)備 驅(qū)動(dòng)不會(huì)關(guān)閉它.
總結(jié)
以上是生活随笔為你收集整理的linux 挂起 移动电脑,linux 系统挂起的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: u盘添加veket linux,veke
- 下一篇: linux c语言 ppt,linux操