Qual é o significado e o comando executado em Ctrl+Alt+Del no Linux?

Qual é o significado e o comando executado em Ctrl+Alt+Del no Linux?

Na minha área de trabalho gnome GUI do Ubuntu 12.04, Ctrl+ Alt+ Deleteserá desconectado em vez de reinicializado.

Mas me disseram que

Mudar para um console virtual baseado em texto e pressionar Ctrl+Alt+Delete reinicializará a máquina. Ele será desligado e reiniciado de forma limpa, o que é muito melhor que Alt+SysRq+REISUB.

Então eu me pergunto se os dois significados diferentes de Ctrl+ Alt+ acima Deleteestão corretos?

A quais comandos Ctrl+ Alt+ Deleteestá vinculado nesses dois casos?

Responder1

Ctrl++ é na verdade um pressionamento de tecla "mágico" para a arquitetura de hardware compatível com IBM AltPC Deleteque chamaria uma redefinição do BIOS.

Como esse tipo de coisa é perigoso para um sistema como o Linux, foi tomada a decisão de conectar essas teclas e fazer outra coisa. Isso é controlado por inite você pode ver o que ele faz olhando em /etc/inittab.

No meu sistema Debian Squeeze:

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

Mais tarde, o Windows NT seguiu o exemplo e transformou Ctrl+ Alt+ Deleteno modo de entrada de chave segura*.

No caso do X, ele conecta as teclas digitadas de forma semelhante, mas é simplesmente killo servidor de exibição (que reaparecerá automaticamente se você estiver usando um gerenciador de exibição).

Em alguns sistemas (talvez todos, não tento há algum tempo), você ainda pode pressionar Ctrl+ Alt+ Deleteantes que o sistema operacional carregue para acionar uma redefinição do BIOS.


*Não tenho certeza de como eles realmente chamam isso.

Responder2

O kernel do Linux pode reinicializar ou enviar ao SIGINT o processo de inicialização em Ctrl + Alt + Del

O próprio kernel do Linux permite dois comportamentos possíveis de Ctrl-Alt-Del:

  • reinicie imediatamente
  • envie SIGINT para o processo de inicialização

O comportamento usado pode ser selecionado com:

  • rebootchamada de sistema, consulteman 2 reboot
  • /proc/sys/kernel/ctrl-alt-del

Portanto, se o comportamento SIGINT estiver habilitado, o resultado de Ctrl + Alt + Del depende inteiramente do manipulador SIGINT que seu init possui.

Por exemplo, o init 1.28.3 do BusyBox executa um comando arbitrário fornecido /etc/inittabcomo:

::ctrlaltdel:/sbin/reboot

E aqui está um exemplo C mínimo interessante para uclibc:

#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;
}

Aqui estáuma configuração fácil para experimentar isso.

Responder3

As distribuições Linux contemporâneas usam systemdem vez do SysV init. O comportamento do combo ctrl-alt-delete é controlado por ctrl-alt-del.target, que por padrão está vinculado a reboot.target, mas pode ser definido como qualquer outro.

Lista de alvos disponíveis:

systemctl list-unit-files -t target

Mudando de alvo

Pressionar o combo mais de 7 vezes em 2 segundos (como pressionar e segurar) forçaria a reinicialização imediata por padrão (ou a ação especificada por CtrlAltDelBurstAction).

Também é útil kbrequest.target, mas não está habilitado por padrão.

informação relacionada