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

7

Na minha área de trabalho GUI do Ubuntu 12.04, Ctrl + Alt + Excluir será desconectado ao invés de ser reinicializado.

Mas me disseram que

Switching to a text-based virtual console and pressing Ctrl+Alt+Delete will reboot the machine. It will shut down cleanly and reboot, which is much better than Alt+SysRq+REISUB.

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

Quais comandos Ctrl + Alt + Excluir são ligados nestes dois casos?

    
por Tim 08.07.2012 / 06:46

3 respostas

6

Ctrl + Alt + Excluir é na verdade um pressionamento de tecla "mágico" para a arquitetura de hardware compatível com IBM PC que chamaria uma reinicialização do BIOS .

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

No meu sistema Debian Squeeze:

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

O Windows NT posteriormente seguiu o exemplo e transformou Ctrl + Alt + Excluir no modo de entrada de chave segura *.

No caso do X, é similarmente ligar os toques de tecla mas simplesmente kill s o servidor de exibição (que reaparecerá automaticamente se você estiver usando um gerenciador de exibição).

Alguns sistemas (talvez todos, eu não tentei por um tempo) você ainda pode pressionar Ctrl + Alt + Excluir antes do O SO carrega para acionar uma redefinição do BIOS.

* Não tenho certeza do que eles realmente chamam.

    
por 08.07.2012 / 09:25
2

O kernel do Linux pode ser reinicializado por hardware ou enviar o processo init ao SIGINT com Ctrl + Alt + Del

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

  • reinicialize imediatamente
  • envia SIGINT para o processo init

Qual comportamento é usado pode ser selecionado com:

  • reboot chamada do sistema, consulte man 2 reboot
  • /proc/sys/kernel/ctrl-alt-del

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

Por exemplo, o comando 1.28.3 do BusyBox 'exec executa um comando arbitrário dado em /etc/inittab as:

::ctrlaltdel:/sbin/reboot

E aqui está um exemplo interessante de C mínimo para o 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 .

    
por 20.05.2018 / 16:43
1

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

Lista de alvos disponíveis:

systemctl list-unit-files -t target

Alternando o destino

Pressionar o combo 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 isso não está ativado por padrão.

    
por 20.05.2018 / 18:52