Welche Bedeutung und welchen Befehl wird unter Linux unter Strg + Alt + Entf ausgeführt?

7

In meinem gnome GUI - Desktop von Ubuntu 12.04, Ctrl+ Alt+ Deleteloggt statt einen Neustart aus.

Aber mir wurde das gesagt

Wenn Sie zu einer textbasierten virtuellen Konsole wechseln und Strg + Alt + Entf drücken, wird der Computer neu gestartet. Es wird sauber heruntergefahren und neu gestartet, was viel besser ist als Alt + SysRq + REISUB.

Ich frage mich also, ob die beiden oben genannten unterschiedlichen Bedeutungen von Ctrl+ Alt+ Deleterichtig sind.

Was Befehle Ctrl+ Alt+ Deleteist in diesen beiden Fällen binded?

Tim
quelle

Antworten:

6

Ctrl+ Alt+ DeleteIst eigentlich ein „magischer“ Tastendruck für die IBM - PC-kompatible Hardware - Architektur , die ein BIOS - Reset nennen würde.

Da dies für ein System wie Linux gefährlich ist, wurde die Entscheidung getroffen, diese Tastenanschläge zu aktivieren und stattdessen etwas anderes zu tun. Dies wird gesteuert von initund Sie können sehen, was es tut, indem Sie hineinschauen /etc/inittab.

Auf meinem Debian Squeeze-System:

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

Windows NT später gefolgt und drehte Ctrl+ Alt+ Deletein den sicheren Schlüsseleingabemodus *.

Im Fall von X werden die Tastenanschläge auf ähnliche Weise verknüpft, es handelt sich jedoch lediglich um killden Anzeigeserver (der automatisch neu angezeigt wird, wenn Sie einen Anzeigemanager verwenden).

Bei einigen Systemen (vielleicht bei allen, die ich seit einiger Zeit nicht mehr ausprobiert habe) können Sie noch Ctrl+ Alt+ drücken, Deletebevor das Betriebssystem geladen wird, um einen BIOS-Reset auszulösen.


* Ich bin nicht sicher, wie sie es tatsächlich nennen.

Bahamat
quelle
Vielen Dank! Wofür wird /etc/inittabverwendet?
Tim
@ Tim: /etc/inittabist mehr oder weniger die Konfigurationsdatei für init.
Bahamat
Auf meinem Ubuntu 12.04 gibt es kein / etc / inittab. Was könnte möglicherweise die Alternative sein?
Tim
Mm, das stimmt. Ubuntu verwendet upstarteher als init. Das Äquivalent unter Ubuntu ist das etc/initVerzeichnis. ( Nicht beachten /etc/init.d).
Bahamat
1
@Tim /etc/init/control-alt-delete.confUpstart wird immer noch aufgerufen init , aber es ist nicht das Traditionelle init. Siehe den Wikipedia-Artikel und die Projektseite .
Eliah Kagan
2

Der Linux-Kernel kann entweder einen Neustart durchführen oder SIGINT den Init-Prozess bei Strg + Alt + Entf senden

Der Linux-Kernel selbst erlaubt zwei mögliche Verhaltensweisen von Strg-Alt-Entf:

  • Sofort neu starten
  • Senden Sie SIGINT an den Init-Prozess

Welches Verhalten verwendet wird, kann mit folgenden Optionen ausgewählt werden:

  • reboot Systemaufruf, siehe man 2 reboot
  • /proc/sys/kernel/ctrl-alt-del

Wenn das SIGINT-Verhalten aktiviert ist, hängt das Ergebnis von Strg + Alt + Entf vollständig vom SIGINT-Handler ab, über den Ihr Init verfügt.

Zum Beispiel führt BusyBox '1.28.3 init einen beliebigen Befehl aus, der /etc/inittabwie folgt angegeben wird :

::ctrlaltdel:/sbin/reboot

Und hier ist ein minimal 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;
}

Hier ist eine einfache Einrichtung, um dies auszuprobieren .

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
quelle
1

Zeitgemäße Linux-Distributionen verwenden systemdanstelle von SysV init. Das Verhalten der Kombination aus Strg-Alt-Löschen wird von ctrl-alt-del.target behandelt, das standardmäßig mit reboot.target verknüpft ist, aber auf ein anderes festgelegt werden kann.

Liste der verfügbaren Ziele:

systemctl list-unit-files -t target

Ziel wechseln

Wenn Sie die Combo innerhalb von 2 Sekunden mehr als 7 Mal drücken (z. B. gedrückt halten), wird standardmäßig ein sofortiger Neustart erzwungen (oder die von angegebene Aktion CtrlAltDelBurstAction).

Es ist auch nützlich kbrequest.target, aber dies ist nicht standardmäßig aktiviert.

Tomasz Pala
quelle