Was ist der Unterschied zwischen Strg-z und Strg-c im Terminal?

94

Kann mir jemand den Unterschied zwischen ctrl + z und ctrl + c erklären?

Wenn ich im Terminal bin, stoppen beide Kombinationen den aktuellen Prozess, aber was genau ist der Unterschied zwischen beiden?

    
chaitanya lakkundi 13.08.2014, 15:50

6 Antworten

128

Wenn wir Randfälle auf einer Seite belassen, ist der Unterschied einfach. Control + C bricht die Anwendung fast sofort ab, während Control + Z in den Hintergrund versetzt, suspendiert wird. p>

Die Shell sendet verschiedene Signale an die zugrunde liegenden Anwendungen dieser Kombinationen:

  • Kontrolle + C (Steuerzeichen intr ) sendet SIGINT, wodurch die Anwendung unterbrochen wird. Dies führt normalerweise dazu, dass es abbricht, aber das liegt an der Entscheidung der Anwendung.

  • Kontrolle + Z <(>% cc_de%) sendet SIGTSTP an eine Vordergrundanwendung und setzt sie effektiv im Hintergrund, suspendiert. Dies ist nützlich, wenn Sie aus etwas wie einem Editor ausbrechen müssen, um einige Daten zu erhalten, die Sie benötigen. Sie können in die Anwendung zurückkehren, indem Sie susp (oder fg , wobei %x die Auftragsnummer ist, wie in x angezeigt) ausführen.

    Wir können dies testen, indem wir jobs ausführen, dann Strg + Z nano TEST ausführen. Dies zeigt uns, dass der Prozess ps aux | grep TEST noch läuft:

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    Außerdem können wir sehen (von dem T, das sich in der Statusspalte befindet), dass der Prozess gestoppt wurde . Es ist also noch am Leben, aber es läuft nicht ... Es kann fortgesetzt werden.

    Einige Anwendungen stürzen ab, wenn sie externe Prozesse (z. B. eine Webanforderung) ausführen, die im eingeschalteten Zustand eine Zeitüberschreitung verursachen können.

Oli 13.08.2014, 15:56
14

Kontrolle + Z stoppt einen Prozess ( SIGTSTP ) und Kontrolle <+ kk> unterbricht einen Prozess ( SIGINT )

Pfandrecht

  

Auf Unix-ähnlichen Systemen ist Control + Z die gebräuchlichste Standardtastaturzuordnung für die Tastensequenz, die einen Prozess aussetzt

Pfandrecht

  

In POSIX-Systemen bewirkt die Sequenz, dass das aktive Programm ein SIGINT-Signal empfängt. Wenn das Programm nicht angibt, wie mit dieser Bedingung umzugehen ist, wird es beendet. Normalerweise beendet sich ein Programm, das ein SIGINT behandelt, immer noch selbst oder beendet zumindest die darin laufende Aufgabe

    
9

Strg + C wird verwendet, um einen Prozess mit dem Signal SIGINT zu beenden, mit anderen Worten, es ist ein höflicher kill .

Strg + Z wird verwendet, um einen Prozess durch Senden des Signals SIGSTOP , das wie ein Schlafsignal ist, auszusetzen rückgängig gemacht und der Prozess kann wieder aufgenommen werden.

Wenn jedoch ein Prozess angehalten wird, können wir ihn erneut mit fg (resume in forground) und bg (resume in background) fortsetzen, aber ich kann einen getöteten Prozess nicht fortsetzen, das ist ein Unterschied zwischen der Verwendung von Strg + C & lt; Strg + Z .

Wie den angehaltenen Prozess anzeigen?

Wenn Sie den Befehl jobs verwenden, lautet die Ausgabe:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

Wie einen suspendierten Prozess im Hintergrund beenden?

Mit dem Befehl kill :

kill% n wobei n Zahlen sind, die im Job-Befehl angezeigt werden, also möchte ich cat: kill %1 .

töten     
nux 14.08.2014 09:49
6

Dies sollte helfen

  

Strg + Z wird zum Aussetzen eines Prozesses verwendet, indem ihm das Signal SIGSTOP gesendet wird, das vom Programm nicht abgefangen werden kann. Während Ctrl + C verwendet wird, um einen Prozess mit dem Signal SIGINT zu beenden, und kann von einem Programm abgefangen werden, so dass es sich selbst vor dem Beenden bereinigen kann oder nicht bei alles.

    
Graham 13.08.2014 15:58
3

Wenn Sie ctrl + c drücken, bedeutet dies, dass Sie SIGINT an Ihren Prozess senden. Wie Sie diesen Befehl eingeben: kill -SIGINT <your_pid> . Es wird dich umbringen. Deshalb können Sie es nicht sehen, wenn Sie den Befehl ps ausführen.
Wenn Sie ctrl + z drücken, bedeutet dies, dass Sie SIGSTOP an Ihren Prozess senden. Wie Sie diesen Befehl eingeben: kill -SIGKSTOP <your_pid> . Es wird Ihren Prozess stoppen, aber der Prozess noch am Leben. So können Sie Ihren Prozess erneut aktivieren, indem Sie SIGCONT an Ihren Prozess senden.

    
P_O_I_S_O_N 14.08.2014 09:24
3

Um es einfach zu sagen:

  • STRG - C verlangt, dass das Programm abgebrochen wird.

  • STRG - Z zwingt das Programm, auszusetzen und in den Hintergrund zu wechseln .

    Damit können Sie später mit dem Befehl fg weitermachen. Verbleibende Hintergrundaufgaben werden beendet, wenn Sie die Login-Shell verlassen.

thomasrutter 15.08.2014 02:39

Tags und Links