2011-03-27 00:39:57 +0000 2011-03-27 00:39:57 +0000
191
191

Was ist der Unterschied zwischen Strg+Z und Strg+C in der Unix-Befehlszeile?

Ich benutze Mac OS X Terminal. Und ich benutze Strg+Z oder Strg+C, um einige Programme zu stoppen. Aber mir wurde klar, dass ich nicht weiß, was sie genau tun. Was sind sie und was ist der Unterschied zwischen ihnen?

Diese Frage war eine * Super User Question of the Week . Lesen Sie den 13. März 2011 * Blogeintrag für weitere Details oder * reichen Sie Ihre eigene ** Frage der Woche ein.

Antworten (6)

255
255
255
2011-03-27 01:15:51 +0000

Steuerung+Z wird verwendet, um einen Prozess durch Senden des Signals SIGSTOP, das vom Programm nicht abgefangen werden kann, zu unterbrechen. Während Steuerung+C verwendet wird, um einen Prozess mit dem Signal SIGINT abzubrechen, und von einem Programm abgefangen werden kann, so dass es sich vor dem Beenden selbst bereinigen kann oder überhaupt nicht beendet wird.

Wenn Sie einen Prozess anhalten, wird dies in der Shell angezeigt, um Ihnen mitzuteilen, dass er angehalten wurde:

[1]+ Stopped yes

Wenn Sie jedoch einen Prozess anhalten, sehen Sie keine Bestätigung, außer dass er auf einen Shell-Prompt zurückgeworfen wird. Wenn Sie einen Prozess suspendieren, können Sie damit auch ausgefallene Dinge tun. Wenn Sie zum Beispiel dies ausführen:

fg

Mit einem angehaltenen Programm wird es wieder in den Vordergrund gebracht.

Und wenn Sie den Befehl

bg

Mit einem angehaltenen Programm ausführen, kann es im Hintergrund laufen (die Ausgabe des Programms geht aber immer noch an den TTY).

Wenn Sie ein angehaltenes Programm töten wollen, müssen Sie es nicht erst mit fg zurückbringen, sondern können einfach den Befehl:

kill %1

Wenn Sie mehrere angehaltene Befehle haben, wird das Ausführen von

jobs

diese auflisten, so wie hier:

[1]- Stopped pianobar
[2]+ Stopped yes

Mit %#, wobei # die Auftragsnummer (die in eckigen Klammern von der Ausgabe jobs) mit bg, fg oder kill ist, können Sie die Aktion für diesen Auftrag ausführen.

22
22
22
2011-03-27 00:43:15 +0000

Strg+Z unterbricht den Prozess mit SIGTSTP, Sie können ihn später wieder aufnehmen. Strg+C beendet den Prozess mit SIGINT, wodurch der Prozess beendet wird, es sei denn, er wird vom Ziel gehandhabt/unterdrückt, so dass Sie ihn nicht wieder aufnehmen können. Es gibt auch ein SIGSTOP, das durch kill() gesendet werden kann und das der Prozess nicht abfangen kann. SIGCONT ist das Gegenstück sowohl zu SIGSTOP als auch zu SIGTSTP, das den Prozess nicht aufhält.

18
18
18
2011-03-27 11:52:36 +0000

STRG+Z stoppt (pausiert) einen Job

STRG+C beendet einen Job

mit STRG+C können Sie den Prozess nicht wieder aufnehmen, aber mit STRG+Z kann der Job wieder aufgenommen werden, indem Sie einfach an der Befehlszeile eingeben:

fg %1

wenn Sie mehrere Prozesse pausiert haben, dann sollten Sie

jobs

tun, um die Ausgabe zu sehen und die entsprechende Nummer auszuwählen, um e fortzusetzen. g.

fg %3

nimmt die dritte Stelle in der Liste wieder auf. Sie können auch Jobs im Hintergrund mit

bg %n

laufen lassen, wobei n die Jobnummer ist.

3
3
3
2014-07-03 15:57:10 +0000

STRG+Z stoppt (pausiert) einen Job

STRG+C beendet einen Job

Mit STRG+C können Sie den Prozess nicht fortsetzen, aber mit STRG+Z kann der Job durch einfache Eingabe an der Eingabeaufforderung fortgesetzt werden:

fg %1

Wenn Sie mehrere Prozesse pausiert haben, sollten Sie

jobs

ausführen, um die Ausgabe zu sehen.

3
3
3
2014-03-13 06:48:21 +0000
Cntrl + Z pause the currently running process.

Und

Cntrl + C simply terminates the running process.

Mit Strg + C können Sie den Prozess nicht wieder aufnehmen, während Sie mit Strg + Z den Prozess wieder aufnehmen können.

verwenden Sie fg %1, um den Prozess wieder aufzunehmen.

2
2
2
2013-02-26 17:19:22 +0000

Die vorherigen Antworten sind korrekt, aber aus irgendeinem unbekannten Grund unterbricht Ctrl-Z auch alle Kindprozesse, aber killall -SIGSTOP … unterbricht nur den vordersten (Eltern-)Prozess und lässt die Kinder laufen, wie sie wollen.