跳轉到內容

Linux 指南/凍結

來自華夏公益教科書

本頁描述了當程式出錯時如何擺脫問題。最常見的方法是殺死程序 - 單個程式或其部分。如果你殺死一個程序,你可能會丟失該程式中的任何未儲存的資料,以及可能從它生成的或與其通訊的其他程式中丟失的資料。

本頁還描述瞭如果計算機完全凍結該怎麼辦。

這些建議的後果越往列表下面越嚴重。例如,在 KDE 中殺死一個視窗將丟失該程式中未儲存的資料,而按下重置按鈕可能會損壞硬碟上的所有資料(在極端情況下)。除非別無選擇,否則不要採取極端措施。

在桌面上

[編輯 | 編輯原始碼]

在 X 視窗 (通用)

[編輯 | 編輯原始碼]

在使用 X 環境時,預設的易於使用的應用程式用於殺死凍結的軟體部分是 xkill。執行後,滑鼠游標將變為一個頭骨和交叉骨的圖示,你點選的下一個視窗將被殺死。

 xkill

有時可以透過按下 Control+Alt+Escape 來完成,或者透過使用 ALT+F2 開啟“執行”對話方塊,輸入“xkill”然後按下 RETURN。

在 KDE 中

[編輯 | 編輯原始碼]

KDE 系統守護程式(預設安裝)可用於殺死有問題的程序。Ctrl+Esc 是啟動它的預設鍵組合,或者執行 ksysguard

在 GNOME 中

[編輯 | 編輯原始碼]

gnome-system-monitor 圖形介面程式是檢視活動程序、結束程序以及殺死程序的一種方法。還有一個“強制退出”小部件可以新增到面板中,它複製了 xkill 的功能。

在控制檯中殺死

[編輯 | 編輯原始碼]

停止在您使用的終端上執行的程式的最簡單方法是按下 Ctrl+C,這會要求程式停止(傳送 SIGINT) - 但程式可以忽略它。Ctrl+C 也適用於 XTerm 或 Konsole 之類的程式。另請參閱下面的 Alt+SysRq+K

此外,還有一些命令可以從任何終端視窗殺死程序,而不僅僅是從程式執行的視窗。您可以使用 XTerm 或 Konsole 之類的程式來提供一個假的終端,或者您也可以透過按下 ctrl+alt+功能鍵來切換到終端;即 Ctrl+Alt+F2 到 Ctrl+Alt+F6(取決於您的系統)。Ctrl+Alt+F7 會讓您返回桌面(同樣,取決於您的系統)。

UNIX 指南/命令/程序管理 頁面提供了有關程序管理命令的更多資訊,但下面列出了一些常用的命令

  • pkillkillall 是最有用的程式殺死命令,它們執行類似的操作。只需輸入
pkill -TERM program_name
或者
killall program_name
此外,pgrep 可用於列出正在執行的程序。

強制退出 X 視窗系統

[編輯 | 編輯原始碼]
  • 要殺死並重新啟動 X 視窗系統,請按下 Ctrl+Alt+Backspace。許多程式需要 X-Window,因此使用它會導致大多數正在執行的程式退出或崩潰。
  • 您可能應該嘗試在此之後重置計算機:輸入
shutdown -r now
來執行此操作。您可能需要以 root 身份登入。
  • 如果您有權訪問命令列,您也可以輸入
sudo /etc/init.d/(gdm or kdm or xdm) shutdown
來停止 X。
  • 請注意,可以透過 X 的配置檔案停用透過按下 Ctrl+Alt+Backspace 重新啟動 X 的功能。在 X.Org 實現中,可以將“DontZap”選項新增到 xorg.conf 來執行此操作。如果 Ctrl+Alt+Backspace 不起作用,這可能是原因。

如果您執行 Ctrl+Alt+Backspace 並且啟用了 XDM 之類的登入管理器,通常在 x 重啟後您將被拋回該登入管理器。如果您透過輸入 startx 啟動 X,這通常會將您拋回命令列

Ctrl+Alt+Backspace 可用於在更改解析度後重新啟動 X,例如。

Alt+SysRq

[編輯 | 編輯原始碼]

如果其他方法都失敗了,您仍然可以與 核心 通訊。

要使用它,只需按住 Alt 和 SysRq(PrintScreen)鍵以及下面列出的鍵之一,全部一起按下。您應該嘗試先切換到終端視窗,如果可能的話,透過按下 Ctrl+Alt+F2 (使用 Ctrl+Alt+F7 返回桌面)

如果您的計算機沒有響應,您可以使用以下步驟執行重新啟動,從而減少 fscking 檔案的可能性。這是一種建議的方法

  1. 按下 Ctrl+Alt+F2 切換到終端視窗。有時,這是不可能的。
  2. 按下 Alt+SysRq+R 來獲取鍵盤
  3. 如果之前按下 Ctrl+Alt+F2 失敗了,請現在嘗試再次按下。
  4. 按下 Alt+SysRq+E 結束所有程序。
  5. 按下 Alt+SysRq+I 殺死所有程序。
  6. 按下 Alt+SysRq+S 同步磁碟。
  7. 等待 “OK” 或 “Done” 訊息。如果您沒有看到訊息,請檢視硬碟指示燈以檢視 Sync 是否有作用。
  8. 按下 Alt+SysRq+U 解除安裝所有磁碟驅動器。
  9. 等待 “OK” 或 “Done” 訊息。如果您沒有看到訊息,請在 15-30 秒後,假設磁碟已解除安裝(或無法解除安裝),然後繼續。
  10. 按下 Alt+SysRq+B 重新啟動。

使用的字母拼寫為 REISUB - 使用助記符 即使系統完全崩潰也要重啟。另一個流行的助記符是 養大象是如此無聊,或者直接將 BUSIER 倒過來拼寫。

下面顯示了所有可用命令的完整列表。它主要來自 Linux 核心原始碼中的 Documentation/sysrq.txt

Alt+SysRq+ 動作 用途
R UnRaw 關閉鍵盤原始模式。這允許從鍵盤輸入,即使 X-Window 崩潰了。
K SAK - 殺死所有在控制檯上的程序 安全訪問金鑰 - 殺死當前虛擬控制檯上的所有程式。如果您想確保沒有程式在控制檯上等待獲取您的密碼,或者如果某個程序不允許您切換控制檯,這將很有用。
S Sync 嘗試同步所有檔案系統。這減少了資料丟失和 fscking 的可能性。同步完成後,將列印 “done” 或 “OK”。
U Umount 嘗試以只讀方式重新掛載所有檔案系統。解除安裝完成後,將列印 “done” 或 “OK”。
B Reboot 將立即重新啟動,而不會同步或解除安裝任何磁碟。在使用此命令之前,請使用 Alt+SysRq+S 和 Alt+SysRq+U 以避免資料丟失。
C Crashdump 將執行 kexec 重新啟動,以獲取崩潰轉儲。在使用此命令之前,請使用 Alt+SysRq+S 和 Alt+SysRq+U 以避免資料丟失。
O Power Off 關閉計算機,而不會同步或解除安裝磁碟。在使用此命令之前,請使用 Alt+SysRq+S 和 Alt+SysRq+U 以避免資料丟失。
P Show Pc 嘗試將所有暫存器和指標轉儲到控制檯。
T Show Tasks 嘗試將所有任務的列表轉儲到控制檯。
M Show Memory Info 將記憶體資訊顯示到控制檯
V Voyager 處理器資訊 將 Voyager SMP 處理器資訊轉儲到您的控制檯。
0-8 核心錯誤詳細程度 設定核心訊息的控制檯日誌級別。設定為 0 只顯示 PANIC 和 OOPS 之類的訊息
F OOM Kill 呼叫 oom_kill 來殺死佔用記憶體過多的程序
E Term 向所有程序傳送 SIGTERM 訊號。
I Kill 殺死(向所有程序傳送 SIGKILL 訊號)。
L Kill + Kill Init 殺死(向所有程序傳送 SIGKILL 訊號),包括 init。使用此命令後,您將無法執行任何其他操作!
N Nice 使即時程序可進行 nice 操作。
H Help 列印一些幫助資訊

某些系統(由除您自己以外的部門或組管理的系統,例如公司或政府場所)可能會刪除使用 SysRq 鍵組合的功能,以保護其系統免受低階命令的影響。如果您嘗試了一些命令並發現沒有任何反應,或者出現錯誤訊息,這可能是原因。

大紅按鈕

[編輯 | 編輯原始碼]

當然,最後的選項是您計算機物理外殼上的電源按鈕。現代 PC 有 ACPI 按鈕,它只是將關機請求傳送到核心。如果 ACPI 守護程序 正在監聽並正確配置,它可以向 init 傳送訊號並執行乾淨的關機。

如果 ACPI 不起作用,您需要切斷電源。這可以透過“硬開關”(通常標記為“重置”)完成,可能使用與之前相同的按鈕,但按住它 5 秒左右。取出電池(在筆記型電腦上)並物理斷開所有電源線,當然,這是唯一保證有效的方法。(確保上述其他方法均無效。即使作為最後的手段,也不建議在計算機執行時拔掉電源。)

重置而不關機可能會導致檔案系統出現問題。為了嘗試解決此問題,下次啟動時將執行 fsck,日誌檔案系統將嘗試完成或回滾正在更改的檔案。

華夏公益教科書