Auswirkung von Strg-S / XOFF auf den Prozess

Auswirkung von Strg-S / XOFF auf den Prozess

Während des Laufens apt upgradehabe ich versehentlich ein Ctrl- San dieses Terminalfenster gesendet.

Jetzt weiß ich von XOFF, XON, Ctrl- Q, und etwas Neues über Fernschreiber.

Als ich ein Ctrl- Qan das „angehaltene“ Terminal schickte, aptwurde seine Arbeit fortgesetzt.

Aus der Lektüre über XOFFist mir nicht klar, was in passiert ist apt, oder was generell bei jedem Befehl passiert, der ein empfängt XOFF. htopstoppt die Aktualisierung der Anzeige, was gut zu wissen ist, aber htopläuft immer noch?

Lief es aptnoch? Oder war es aptpraktisch htopangehalten bzw. eingefroren?

Offensichtlich können die Prozesse während XOFFdes Ausführens noch Eingaben empfangen und werden daher weiterhin ausgeführt.

Was passiert? Beispielsweise hört der Programmzähler offensichtlich nicht einfach auf, den Programmzähler hochzuzählen, sondern friert das Programm ein.

Hängt es davon ab, wie der Befehl zum Umgang mit XOFF programmiert ist? Gibt es ein allgemeines Verhalten, das bei den grundlegenden Linux-Befehlen zu erwarten ist?

NotizDasDasund ähnliche Fragen enthalten keine Antworten auf meine Frage, da sie nicht erwähnen, was im Programm selbst passiert. Ich weiß beispielsweise nicht, ob es aptstillschweigend weiterlief oder ob es eingefroren/angehalten war.

Antwort1

Wie Sie vielleicht bereits wissen, sind XONund XOFF, die standardmäßig an Ctrl+ Sund Ctrl+ gebunden sind,QSoftware-FlusskontrolleCharaktere und im Prinzip Relikte aus deralte Zeiten der papierdruckenden Fernschreiber. Sie wurden zu Zeiten verwendet, in denen ein Empfangsgerät (oft ein Papierdrucker) manchmal nicht mit den von einem Remote-Absender gesendeten Eingaben Schritt halten konnte.

Heutzutage werden Papierfernschreiber nicht mehr verwendet, aber die Idee dahinter bleibt im Software-Rahmen eines "Terminals" erhalten (siehe z. B.HierUnddieser sehr schöne Artikel über die Geschichte des TTY), das einige der Konzepte der ursprünglichen papierbasierten Terminals übernommen hat und noch immer implementiert – eines davon ist die Fähigkeit, Flusssteuerungszeichen zu interpretieren.

Normalerweise bekommt ein Programm, das „auf der Konsole“ läuft, also mit einem Pseudoterminal verbunden ist, die Zeichen XONund nicht zu sehen XOFF, da sie standardmäßig vom Terminal abgefangen werden, wobei das Standardverhalten darin XOFFbesteht, das Drucken der vom Programm empfangenen Ausgabe zu stoppen. Das Programm selbst ist ansonsten nicht betroffen und läuft im Hintergrund weiter, nur die Ausgabe wird nicht an den Benutzer „weitergesendet“, bis XONerneut ein empfangen wird.

Wenn Sie ein Programm schreiben und diese Eingabezeichen explizit empfangen möchten, können Sie den tcsetattr()Systemaufruf in Ihrem Programm verwenden, um die Software-Flusskontrolle über das IXOFFFlag zu deaktivieren (siehehier zB) -nanomacht das, Zum Beispiel.

Antwort2

htopstoppt die Aktualisierung der Anzeige, was gut zu wissen ist, htopläuft aber immer noch [nachdem Strg-S eingegeben wurde]?

Ja, absolut. htopoder ein anderer Befehl wird durch Strg-S NICHT gestoppt oder eingefroren.

Die IXONTermios-Einstellung funktioniert nicht wie folgt ISIG. Das Eintippen der Zeichen VSTOP(Strg-S) oder VSTART(Strg-Q) sendet KEIN Signal an den im Terminal laufenden Prozess.

Das lässt sich ganz einfach überprüfen: Öffnen Sie zwei Terminals: Geben Sie im ersten

tail -f /tmp/file

und im zweiten

cat > /tmp/file

Geben Sie nun im zweiten Terminal Strg-S ein und tippen Sie dann blind Zeilen ein, gefolgt von der Eingabetaste. Sie werden auf dem Bildschirm im ersten Terminal angezeigt. Wenn cates sich stattdessen um eine Shell handelt und es sich um Befehle wie handelt rm ..., werden diese ausgeführt, ohne dass sie auf dem Bildschirm wiedergegeben werden müssen.

was im Allgemeinen bei jedem Befehl passiert, der ein XOFF empfängt.

Der Befehl „empfängt kein XOFF“. Das wird alles im Terminaltreiber gehandhabt. Aus Sicht der Anwendung passiert nichts. Wenn das Programm weiterhin umfangreiche Ausgaben sendet (oder die ECHOTermios-Einstellung aktiviert ist – die Standardeinstellung – und weiterhin umfangreiche Eingaben empfängt), wird jeder Schreibvorgang (oder entsprechende Lesevorgang) zum Terminal irgendwann blockiert, bis Strg-Q empfangen wird.

verwandte Informationen