Auf meinem Gnome-GUI-Desktop von Ubuntu 12.04 erfolgt eine Abmeldung Ctrlper + Alt+ statt eines Neustarts.Delete
Aber mir wurde gesagt, dass
Wenn Sie zu einer textbasierten virtuellen Konsole wechseln und Strg+Alt+Entf drücken, wird der Computer neu gestartet. Er wird sauber heruntergefahren und neu gestartet, was viel besser ist als Alt+SysRq+REISUB.
Daher frage ich mich, ob die beiden oben genannten unterschiedlichen Bedeutungen von Ctrl+ Alt+ Deleterichtig sind?
An welche Befehle wird Ctrl+ Alt+ Deletein diesen beiden Fällen gebunden?
Antwort1
Ctrl+ Alt+ Deleteist eigentlich ein „magischer“ Tastendruck für die IBM PC-kompatible Hardwarearchitektur, der einen BIOS-Reset auslöst.
Da so etwas für ein System wie Linux gefährlich ist, wurde entschieden, diese Tastenanschläge abzufangen und stattdessen etwas anderes zu tun. Dies wird gesteuert von init
und Sie können sehen, was es tut, indem Sie in nachsehen /etc/inittab
.
Auf meinem Debian Squeeze-System:
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
Windows NT zog später nach und machte aus Ctrl+ Alt+ Deleteden sicheren Tasteneingabemodus*.
Im Falle von X werden die Tastenanschläge auf ähnliche Weise abgefangen, es handelt sich dabei jedoch lediglich kill
um den Anzeigeserver (der automatisch neu gestartet wird, wenn Sie einen Anzeigemanager verwenden).
Bei einigen Systemen (vielleicht allen, ich habe es schon lange nicht mehr probiert) können Sie immer noch Ctrl+ Alt+ drücken Delete, bevor das Betriebssystem geladen wird, um einen BIOS-Reset auszulösen.
*Ich bin nicht sicher, wie es eigentlich heißt.
Antwort2
Der Linux-Kernel kann entweder einen Hard-Reboot durchführen oder dem Init-Prozess bei Strg + Alt + Entf SIGINT senden.
Der Linux-Kernel selbst ermöglicht zwei mögliche Verhaltensweisen von Strg-Alt-Entf:
- sofort neu starten
- sende SIGINT an den Init-Prozess
Welches Verhalten verwendet wird, kann folgendermaßen ausgewählt werden:
reboot
Systemaufruf, sieheman 2 reboot
/proc/sys/kernel/ctrl-alt-del
Wenn das SIGINT-Verhalten aktiviert ist, hängt das Ergebnis von Strg + Alt + Entf daher vollständig vom SIGINT-Handler Ihres Initialisierungsvorgangs ab.
Beispielsweise führt BusyBox' 1.28.3 init einen beliebigen Befehl aus, der /etc/inittab
wie folgt angegeben ist:
::ctrlaltdel:/sbin/reboot
Und hier ist ein minimales interessantes C-Beispiel für 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;
}
Antwort3
Moderne Linux-Distributionen verwenden systemd
stattdessen SysV-Init. Das Verhalten der Kombination Strg-Alt-Entf wird von Strg-Alt-Entf.target gesteuert, das standardmäßig mit reboot.target verknüpft ist, aber auch auf jeden anderen Wert eingestellt werden kann.
Liste der verfügbaren Ziele:
systemctl list-unit-files -t target
Wenn Sie die Kombination innerhalb von 2 Sekunden mehr als 7 Mal drücken (z. B. drücken und gedrückt halten), wird standardmäßig ein sofortiger Neustart erzwungen (oder die durch angegebene Aktion CtrlAltDelBurstAction
).
Es gibt auch nützliche kbrequest.target
, aber diese sind standardmäßig nicht aktiviert.