Kann mir jemand den Unterschied zwischen ctrl+ zund ctrl+ sagen c?
Wenn ich im Terminal bin, stoppen beide Kombinationen den aktuellen Vorgang, aber was genau ist der Unterschied zwischen beiden?
command-line
chaitanya lakkundi
quelle
quelle
Antworten:
Wenn wir Randfälle beiseite lassen, ist der Unterschied einfach. Control+ Cbricht die Anwendung fast sofort ab, während Control+ Zsie im Hintergrund angehalten wird.
Die Shell sendet bei diesen Kombinationen verschiedene Signale an die zugrunde liegenden Anwendungen:
Control+ C(Steuerzeichen
intr
) sendet SIGINT, wodurch die Anwendung unterbrochen wird. In der Regel wird der Vorgang abgebrochen. Die Entscheidung liegt jedoch bei der Anwendung.Control+ Z(Steuerzeichen
susp
) sendet SIGTSTP an eine Vordergrundanwendung und stellt es effektiv in den Hintergrund, angehalten. Dies ist nützlich, wenn Sie aus so etwas wie einem Editor ausbrechen müssen, um die benötigten Daten abzurufen. Sie können in die Anwendung zurückkehren, indem Sie ausführenfg
(oder%x
wox
ist die Auftragsnummer, wie in gezeigtjobs
).Wir können dies testen, indem wir laufen
nano TEST
, dann Control+ drücken Zund dann laufenps aux | grep TEST
. Dies zeigt uns, dass dernano
Prozess noch läuft:Weiter können wir sehen (von diesem 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 über laufende externe Prozesse verfügen (z. B. eine Webanforderung), bei denen im Schlaf möglicherweise eine Zeitüberschreitung auftritt.
quelle
bg
(anstattfg
zu deaktivieren), ohne sie wieder in den Vordergrund zu stellen. effektiv geben Sie die Kontrolle sowohl der Schale, die die Anwendung gestartet und die Anwendung selbst, als ob Sie verwendet hatte&
beim Starten der Anwendung. Dies ist oft nützlich, wenn Sie vergessen haben, es mit&
:) zu beginnenfg
erneut eingeben !ctrl c
oder in den Vordergrund zurückkehren mussctrl z
? Es ist standardmäßig die SID (Bash)?Control+ Zunterbricht einen Prozess (
SIGTSTP
) und Control+ Cunterbricht einen Prozess (SIGINT
)http://en.wikipedia.org/wiki/Control-Z
http://en.wikipedia.org/wiki/Control-C
quelle
Ctrl+ Cwird verwendet, um einen Prozess mit einem Signal abzubrechen
SIGINT
, mit anderen Worten, es ist ein höflicher Abbruch .Ctrl+ Z wird verwendet, um einen Prozess zu unterbrechen, indem es das Signal sendet
SIGTSTP
, das wie ein Schlafsignal aussieht, das rückgängig gemacht werden kann, und der Prozess kann wieder fortgesetzt werden.Wenn ein Prozess angehalten wird, können wir ihn durch
fg
(im Vordergrund wieder aufnehmen) undbg
(im Hintergrund wieder aufnehmen) wieder aufnehmen, aber ich kann einen angehaltenen Prozess nicht wieder aufnehmen, das ist ein Unterschied zwischen der Verwendung von Ctrl+ C& Ctrl+ Z.Wie können wir angehaltene Prozesse anzeigen ?
Der
jobs
Befehl gibt eine Ausgabe wie folgt aus:Wie kann ich einen angehaltenen Prozess im Hintergrund beenden?
Mit dem
kill
Befehl:kill %n
Won
ist die Zahl, die derjobs
Befehl anzeigt ? Also , wenn ich will Katze töten:kill %1
.quelle
Einfach gesagt:
CTRL-C fordert das Programm zum Abbruch auf .
CTRL-Z zwingt das Programm, anzuhalten und in den Hintergrund zu treten .
Auf diese Weise können Sie es später mit dem Befehl fortsetzen
fg
. Verbleibende Hintergrundaufgaben werden beendet, wenn Sie die Anmeldeshell beenden.quelle
Dies sollte dazu beitragen ,
quelle
SIGTSTP
, die vom Programm abgefangen werden können. Es gibt vier verschiedene Signale, die ein Programm aussetzen kannSIGSTOP
,SIGTSTP
,SIGTTIN
,SIGTTOU
. DavonSIGSTOP
können nur nicht gesperrt werden. Die anderen drei werden vom Terminal verwendet, um den Prozess unter verschiedenen Bedingungen zu stoppen.Wenn Sie ctrl+ drücken c, bedeutet dies, dass Sie SIGINT an Ihren Prozess senden. wie Sie diesen Befehl eingeben:
kill -SIGINT <your_pid>
. Es wird Sie Ihren Prozess töten. Das ist der Grund, warum Sie es nicht sehen können, wenn Sie den Befehl ps absetzen.Wenn Sie ctrl+ drücken z, bedeutet dies, dass Sie SIGSTOP an Ihren Prozess senden. wie Sie diesen Befehl eingeben:
kill -SIGKSTOP <your_pid>
. Es stoppt Ihren Prozess, aber der Prozess lebt noch. Sie können Ihren Prozess also erneut aktivieren, indem Sie SIGCONT an Ihren Prozess senden.quelle