在我的 Ubuntu 12.04 的 gnome GUI 桌面中,Ctrl++將登出而不是重新啟動。AltDelete
但有人告訴我
切換到基於文字的虛擬控制台並按 Ctrl+Alt+Delete 將重新啟動電腦。它會乾淨地關閉並重新啟動,這比 Alt+SysRq+REISUB 好得多。
那我想知道以上兩種Ctrl++Alt的不同意義Delete是否正確?
Ctrl在這兩種情況下++綁定到Alt什麼指令?Delete
答案1
Ctrl+ Alt+Delete其實是 IBM PC 相容硬體架構的「神奇」按鍵,可以呼叫 BIOS 重置。
由於這種事情對於像 Linux 這樣的系統來說是危險的,因此決定掛鉤這些擊鍵並執行其他操作。這是由 控制的init
,您可以透過查看來了解它的作用/etc/inittab
。
在我的 Debian Squeeze 系統上:
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
Windows NT 後來也效仿,將 ++ 轉變Ctrl為Alt安全Delete金鑰輸入模式*。
對於 X,它類似地掛鉤擊鍵,但它只是kill
顯示伺服器(如果您使用顯示管理器,它將自動重生)。
某些系統(也許是所有系統,我有一段時間沒有嘗試過)您仍然可以在作業系統加載之前按Ctrl+ Alt+來觸發 BIOS 重置。Delete
*我不確定他們實際上叫它什麼。
答案2
Linux 核心可以硬重啟或透過 Ctrl + Alt + Del 傳送 SIGINT
Linux 核心本身允許 Ctrl-Alt-Del 執行兩種可能的行為:
- 立即重新啟動
- 向 init 進程發送 SIGINT
可以透過以下任一方式選擇使用哪種行為:
reboot
系統調用,參見man 2 reboot
/proc/sys/kernel/ctrl-alt-del
因此,如果啟用了 SIGINT 行為,則 Ctrl + Alt + Del 的結果完全取決於 init 具有的 SIGINT 處理程序。
例如,BusyBox' 1.28.3 init 執行任意指令,/etc/inittab
如下所示:
::ctrlaltdel:/sbin/reboot
這是 uclibc 的一個最小的有趣的 C 範例:
#define _XOPEN_SOURCE 700
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/reboot.h>
#include <unistd.h>
void signal_handler(int sig) {
write(STDOUT_FILENO, "cad\n", 4);
signal(sig, signal_handler);
}
int main(void) {
int i = 0;
/* Disable the forced reboot, enable sending SIGINT to init. */
reboot(RB_DISABLE_CAD);
signal(SIGINT, signal_handler);
while (1) {
sleep(1);
printf("%d\n", i);
i++;
}
return EXIT_SUCCESS;
}
這是一個簡單的設定來嘗試這個。
答案3
現代 Linux 發行版使用systemd
而不是 SysV init。 ctrl-alt-delete 組合的行為由 ctrl-alt-del.target 處理,預設連結到reboot.target,但可以設定為任何其他目標。
可用目標清單:
systemctl list-unit-files -t target
預設情況下,在 2 秒內按下組合鍵 7 次以上(如按住)將強制立即重新啟動(或指定的操作CtrlAltDelBurstAction
)。
也很有用kbrequest.target
,但預設不啟用。