Linux中Ctrl+Alt+Del的意思和執行的命令是什麼?

Linux中Ctrl+Alt+Del的意思和執行的命令是什麼?

在我的 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 後來也效仿,將 ++ 轉變CtrlAlt安全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,但預設不啟用。

相關內容