Warum wurde Strg + C gewählt, um einen Prozess zu beenden?

430
jhpratt

Ich weiß, warum ctrl+c ein Programm tötet. Ich interessiere mich mehr für die Geschichte, warum "c" gegenüber anderen Buchstaben gewählt wurde, da es (scheinbar) keine semantische Bedeutung hat.

Wenn jemand die Geschichte dahinter kennt (und andere wie ctrl+dfür EOF), wäre das großartig.

0
Es war tatsächlich STRG + Pause und Strg + c wurde hinzugefügt, wobei break ein weicher Terminator und c ein harter Terminator ist. Wenn mein Gedächtnis mir recht ist, ist die Unterbrechungstaste die gleiche wie die des Druckbildschirms, aber es kann auch die Pause sein. Ich habe gewusst, warum es c war. Es war eine Abkürzung für etwas, aber es ist schon so lange her. LPChip vor 6 Jahren 1
Ich habe immer davon ausgegangen, dass es "nah" war. leider ironisch, da Ihre Frage wahrscheinlich aus Meinungsgründen geschlossen ist, da nicht-technische "Warum" -Fragen im Allgemeinen nicht zu lösen sind. Frank Thomas vor 6 Jahren 0
@FrankThomas Natürlich hat dies die Möglichkeit, geschlossen zu werden. Ich würde nicht sagen, dass es auf Meinungen basiert, da es eine historische Frage ist, aber diese Entscheidung liegt nicht bei mir. jhpratt vor 6 Jahren 1
Wenn eine Frage als meinungsbasiert geschlossen wird, wird sie an Personen verwiesen, die eine Antwort aufgrund ihrer Meinung geben, da es kein technisches Dokument gibt, auf das sie sich beziehen, um zu beweisen, dass sie recht haben. Googeln nach CTRL-C CTRL-Break liefert viele Ergebnisse, aber es fällt mir schwer, etwas zu finden, das den Grund für die Wahl von C darstellt. Bisher scheint diese Antwort das Beste zu erklären: https://unix.stackexchange.com/questions/245421/ctrlc-copy-or-interrupt LPChip vor 6 Jahren 0
Schauen Sie sich das _meaning_ der niedrigen ASCII-Codes an (siehe http://www.asciitable.com) - Strg-C war 0x03, ETX, ENDE OF TEXT. Frühe Tastaturen verwendeten die Tasten STRG, UMSCHALTTASTE und META (jetzt ALT) als einfache Indikatoren, um ein Bit auf 0 oder 1 zu erzwingen. Wenn Sie also 0x03 generieren, wurde das 6-Bit (0x40) auf low gesetzt und die C-Taste wurde gedrückt gedrückt, da der Schlüssel mit dem freien 6-Bit 0x43 erzeugen würde. 0x43 ("C") - 0x40 = 0x03, ETX. Jeff Zeitlin vor 6 Jahren 1

1 Antwort auf die Frage

5
LPChip

Ursprünglich bei Unix.stackexchange.com veröffentlicht, aber ich kann die Antwort nicht abschließen, daher ist dies eine Kopie:

Die "Kill" Bedeutung von Ctrl+ Cist sehr alt, ich denke sogar älter als Unix. Wikipedia führt es auf TOPS-10 zurück, das aus den späten 1960er Jahren stammen würde. Der Artikel erklärt, warum Ctrl+ Ceine vernünftige Wahl war: in ASCII, die im Jahr 1963 veröffentlicht wurden, wird das entsprechende Zeichen ETX, End-of-Text . Ohne ein Zeichen für „Stopp“ ¹ war ein Zeichen für „Dieses Eingabesegment ist beendet“ eine vernünftige Wahl für „Stoppen der aktuellen Verarbeitung“.

Die "Kopie" - Bedeutung von Ctrl+ Cstammt von Xerox PARC, den Erfindern von Copy-Paste in seiner modernen Form (und den meisten anderen Grundlagen grafischer Benutzeroberflächen). Ich weiß nicht genau, wann das war, aber es muss Ende der 70er Jahre gewesen sein. In diesem Thread zu User Experience Stack Exchange wird die Auswahl der Tastenzuordnungen beschrieben. C für Kopie macht sehr viel Sinn.

Es gab wenig Grund für PARC, Ctrl+ Caufgrund der bestehenden Bedeutung in TOPS-10- und Unix-Terminals + für die Ablehnung zurückzuweisen . Betriebssysteme und Anwendungen waren damals vielfältiger, und weitaus weniger Menschen verwendeten Computer. Es gab weder Gelegenheit noch einen einzigen Standard für Schlüsselbindungen in allen Anwendungen. Weitere Anwendungen für Ctrl+ Cin gängigen Anwendungen sind das Abblättern in WordStar² und der modusspezifische Befehl in Emacs. Alle wurden unabhängig voneinander für Anwendungen mit häufig unterschiedlichen Anforderungen in unterschiedlichen Umgebungen entwickelt.

Sie können die Terminal-Tastenzuordnungen mit dem stty Befehl konfigurieren . Die Terminalbindungen sind aktiv, wenn sich das Terminal im gekochten Modus befindet³. Beispielsweise setzt der Befehl stty intr ^Gdas Zeichen, das ein SIGINT-Signal sendet, auf Ctrl+ Ganstatt auf Ctrl+ C. Das ^GZeichen ist BEL in ASCII; Wenn Sie an ein Terminal gesendet werden, bedeutet dies „Klingel“. Es ist das Zeichen, das Emacs für „Unterbrechung des aktuellen Vorgangs“ verwendet (Begründung: Die Anwendung sendet BEL über das Terminal an den Benutzer, um den Benutzer zu unterbrechen; der Benutzer sendet BEL an die Anwendung über das Terminal, um die Anwendung zu unterbrechen). Es hat keine Standardbedeutung, wenn es an ein Terminal gesendet wird.

Die meisten Shells bieten Funktionen zur Linienbearbeitung, sodass das Terminal in den Rohmodus versetzt wird. Vollbild-Textmodusanwendungen. Möglicherweise müssen Sie diese Anwendungen so konfigurieren, dass Ctrl+ G anstelle von Ctrl+ erkannt wird C, und einige verfügen möglicherweise über nicht konfigurierbare Tastenzuordnungen. Das Ändern des Interrupt-Zeichens kann also abhängig von den verwendeten Anwendungen praktisch durchführbar sein oder auch nicht.

Ein anderer Ansatz könnte darin bestehen, Ihr Terminal so zu konfigurieren, dass es die Bytefolge ändert, die es für den Ctrl+ C -Schlüsselsatz sendet, oder dass es nichts sendet und stattdessen einen Kopiervorgang ausführt. Sie würden auch einen anderen Tastaturkordel zum Senden Ctrl+ wählen C(wenn Sie eine Tastatur eines Nicht-Laptop-PCs haben, können Sie die Out-of-the-way Pause/ Break -Taste verwenden). Nicht alle Terminals können auf diese Weise konfiguriert werden.

¹ Ctrl-S (XOFF) bedeutet stop, aber es ist an das Terminal gerichtet, nicht an die Anwendung. ² Weiter zu Ctrl+ Xfür die nächste Zeile, mit Ctrl+ Eund Ctrl+ Rfür die vorherige Zeile und zum Seitenaufruf; Diese Tasten wurden aufgrund ihrer Anordnung auf einer QWERTY-Tastatur ausgewählt. ³ Nitpick: Der gekochte Modus ist eine Reihe von Terminaleinstellungen, einschließlich der Interpretation mehrerer Zeichen, einschließlich eines Zeichens, das ein Interrupt-Signal sendet.

Schöne Antwort, gut durchdacht und viel mehr als ich je wissen wollte. ;-) computercarguy vor 6 Jahren 0
Tolle Antwort, besonders in Kombination mit Jeffs Kommentar. Vielen Dank! jhpratt vor 6 Jahren 0