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 init
e 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 kill
o 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:
reboot
chamada 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/inittab
como:
::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;
}
Responder3
As distribuições Linux contemporâneas usam systemd
em 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
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.