linux oops是什么

linux中,oops表示“驚訝”,是一種信息提示,意味著系統(tǒng)上運(yùn)行的某些東西違反了內(nèi)核規(guī)定的規(guī)則;oops會(huì)生成一個(gè)崩潰簽名“crash signature”,可以幫助內(nèi)核開發(fā)人員找出錯(cuò)誤并提高代碼質(zhì)量。

linux oops是什么

本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。

Linux 內(nèi)核正在盯著你,當(dāng)它檢測(cè)到系統(tǒng)上運(yùn)行的某些東西違反了正常內(nèi)核行為時(shí),它會(huì)關(guān)閉系統(tǒng)并發(fā)出一個(gè)“oops”!

如果你檢查你的 Linux 系統(tǒng)上運(yùn)行的進(jìn)程,你可能會(huì)對(duì)一個(gè)叫做 “kerneloops” 的進(jìn)程感到好奇。提示一下,它是 “kernel oops”,而不是 “kerne loops”。

坦率地說(shuō),“oops” 是 Linux 內(nèi)核的一部分出現(xiàn)了偏差行為。你有做錯(cuò)了什么嗎?可能沒有。但有一些不對(duì)勁。而那個(gè)做了錯(cuò)事的進(jìn)程可能已經(jīng)被 CPU 結(jié)束。最糟糕的是,內(nèi)核可能會(huì)報(bào)錯(cuò)并突然關(guān)閉系統(tǒng)。

請(qǐng)注意,“oops” 不是首字母縮略詞。它不代表像“面向?qū)ο蟮木幊毯拖到y(tǒng)object-oriented programming and systems” 或“超出程序規(guī)范out of procedural specs” 之類的東西。它實(shí)際上就是“哎呀” (oops),就像你剛掉下一杯酒或踩在你的貓身上。哎呀! “oops” 的復(fù)數(shù)是 “oopses”。

oops 意味著系統(tǒng)上運(yùn)行的某些東西違反了內(nèi)核有關(guān)正確行為的規(guī)則。也許代碼嘗試采取不允許的代碼路徑或使用無(wú)效指針。不管它是什么,內(nèi)核 —— 總是在監(jiān)測(cè)進(jìn)程的錯(cuò)誤行為 —— 很可能會(huì)阻止特定進(jìn)程,并將它做了什么的消息寫入控制臺(tái)、?/var/log/dmesg?或?/var/log/kern.log?中。

oops 可能是由內(nèi)核本身引起的,也可能是某些進(jìn)程試圖讓內(nèi)核違反在系統(tǒng)上能做的事以及它們被允許做的事。

oops 將生成一個(gè)崩潰簽名crash signature,這可以幫助內(nèi)核開發(fā)人員找出錯(cuò)誤并提高代碼質(zhì)量。

系統(tǒng)上運(yùn)行的 kerneloops 進(jìn)程可能如下所示:

kernoops?881?1?0?Feb11???00:00:01?/usr/sbin/kerneloops

你可能會(huì)注意到該進(jìn)程不是由 root 運(yùn)行的,而是由名為 “kernoops” 的用戶運(yùn)行的,并且它的運(yùn)行時(shí)間極少。實(shí)際上,分配給這個(gè)特定用戶的唯一任務(wù)是運(yùn)行 kerneloops。

$?sudo?grep?kernoops?/etc/passwd kernoops:x:113:65534:Kernel?Oops?Tracking?Daemon,,,:/:/bin/false

如果你的 Linux 系統(tǒng)不帶有 kerneloops(比如 Debian),你可以考慮添加它。查看這個(gè)?Debian 頁(yè)面了解更多信息。

什么時(shí)候應(yīng)該關(guān)注 oops?

一般 oops 沒什么大不了的。它在一定程度上取決于特定進(jìn)程所扮演的角色。它也取決于 oops 的類別。

有些 oops 很嚴(yán)重,會(huì)導(dǎo)致系統(tǒng)恐慌system panic。從技術(shù)上講,系統(tǒng)恐慌是 oops 的一個(gè)子集(即更嚴(yán)重的 oops)。當(dāng)內(nèi)核檢測(cè)到的問(wèn)題足夠嚴(yán)重以至于內(nèi)核認(rèn)為它(內(nèi)核)必須立即停止運(yùn)行以防止數(shù)據(jù)丟失或?qū)ο到y(tǒng)造成其他損害時(shí)會(huì)出現(xiàn)。因此,系統(tǒng)需要暫停并重新啟動(dòng),以防止任何不一致導(dǎo)致不可用或不可靠。所以系統(tǒng)恐慌實(shí)際上是為了保護(hù)自己免受不可挽回的損害。

總之,所有的內(nèi)核恐慌都是 oops,但并不是所有的 oops 都是內(nèi)核恐慌。

/var/log/kern.log?和相關(guān)的輪轉(zhuǎn)日志(/var/log/kern.log.1、/var/log/kern.log.2?等)包含由內(nèi)核生成并由 syslog 處理的日志。

kerneloops 程序收集并默認(rèn)將錯(cuò)誤信息提交到?http://oops.kernel.org/,在那里它會(huì)被分析并呈現(xiàn)給內(nèi)核開發(fā)者。此進(jìn)程的配置詳細(xì)信息在?/etc/kerneloops.conf?文件中指定。你可以使用下面的命令輕松查看設(shè)置:

$?sudo?cat?/etc/kerneloops.conf?|?grep?-v?^#?|?grep?-v?^$ [sudo]?password?for?shs:allow-submit?=?ask allow-pass-on?=?yes submit-url?=?http://oops.kernel.org/submitoops.phplog-file?=?/var/log/kern.logsubmit-pipe?=?/usr/share/apport/kernel_oops

在上面的(默認(rèn))設(shè)置中,內(nèi)核問(wèn)題可以被提交,但要求用戶獲得許可。如果設(shè)置為?allow-submit = always,則不會(huì)詢問(wèn)用戶。

調(diào)試內(nèi)核問(wèn)題是使用 Linux 系統(tǒng)的更高級(jí)技巧之一。幸運(yùn)的是,大多數(shù) Linux 用戶很少或從沒有經(jīng)歷過(guò) oops 或內(nèi)核恐慌。不過(guò),知道 kerneloops 這樣的進(jìn)程在系統(tǒng)中執(zhí)行什么操作,了解可能會(huì)報(bào)告什么以及系統(tǒng)何時(shí)遇到嚴(yán)重的內(nèi)核沖突也是很好的。

相關(guān)推薦:《Linux視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享