O kernel do Linux pode ser reinicializado por hardware ou enviar o processo init ao SIGINT com Ctrl + Alt + Del
Portanto, se o comportamento SIGINT estiver ativado, você pode fazer com que o comando Ctrl + Alt + Del faça o que seu init quiser.
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
Por exemplo, o comando 1.28.3 do BusyBox 'exec executa um comando arbitrário dado em /etc/inittab
como:
::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 .