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


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

Diese Frage war a Super User Frage der Woche.
  Lesen Sie den 13. März 2011 Blog-Eintrag für mehr Details oder reichen Sie Ihre eigenen ein Frage der Woche.


177
2018-03-27 00:39


Ursprung




Antworten:


Steuerung+Z wird verwendet, um einen Prozess durch Senden des Signals zu unterbrechen SIGSTOP, die vom Programm nicht abgefangen werden können. Während Steuerung+C wird verwendet, um einen Prozess mit dem Signal zu beenden SIGINT, und kann von einem Programm abgefangen werden, so dass es sich selbst vor dem Verlassen aufräumen oder gar nicht verlassen kann.

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

[1]+  Stopped                 yes

Wenn Sie jedoch einen töten, sehen Sie keine Bestätigung, außer dass Sie auf eine Shell-Eingabeaufforderung zurückfallen. Wenn Sie einen Prozess anhalten, können Sie damit auch tolle Dinge tun. Zum Beispiel:

fg

Mit einem Programm wird es wieder in den Vordergrund gebracht.

Und den Befehl ausführen

bg

Wenn ein Programm angehalten ist, kann es im Hintergrund ausgeführt werden (die Ausgabe des Programms wird jedoch immer noch zum TTY gehen).

Wenn Sie ein ausgesetztes Programm beenden möchten, müssen Sie es nicht mitbringen fg Zuerst können Sie einfach den Befehl ausführen:

kill %1

Wenn Sie mehrere ausgesetzte Befehle ausführen, wird ausgeführt

jobs

werde sie auflisten, so:

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

Verwenden %#, woher # ist die Jobnummer (die in eckigen Klammern von der jobs Ausgabe) mit bg, fg, oder kill, kann verwendet werden, um die Aktion für diesen Job auszuführen.


234
2018-03-27 01:15



Sie können ändern, welche Tasten welchen Job ausführen, indem Sie die Taste drücken stty Befehl. Beispielsweise stty susp ^Z  oder stty intr ^C. - RedGrittyBrick
Tatsächlich sendet es SIGTSTP, das abgefangen werden kann. - Simon Richter
Cool! Wenn also ein Programm sich weigert, mit Strg + C zu sterben, wie zwingst du es zu töten? - Aditya M P
@adityamenon Suchen Sie beispielsweise den Namen der ausführbaren Datei amarok und Renn killall amarok, oder laufe ps aux und suchen Sie die Prozess-ID neben dem Namen der ausführbaren Datei und führen Sie sie aus kill {process id}. - Bruno Finger


Strg + Z unterbricht den Vorgang mit SIGTSTP, Sie können ihn später fortsetzen. Mit Strg + C wird der Prozess mit SIGINT beendet, wodurch der Prozess beendet wird, sofern er nicht vom Ziel behandelt / ignoriert wird, sodass Sie ihn nicht fortsetzen können. Es gibt auch einen SIGSTOP, der gesendet werden kann kill() und die der Prozess nicht abfangen kann. SIGCONT ist das Gegenstück zu SIGSTOP und SIGTSTP, das den Prozess aufhebt.


22
2018-03-27 00:43



Nein, das ist SIGTSTP, nicht SIGSTOP und es kann abgefangen werden. - sch
@sch, stimmt das jetzt? - Ben Voigt
Ja, obwohl Strg-Z (und STRG-C) einen Prozess verursacht Gruppe (die Vordergrundprozeßgruppe des Terminals), um dieses Signal zu empfangen, nicht notwendigerweise nur einen Prozeß. Beachten Sie auch, dass SIGTTIN und SIGTTOU an Prozesse gesendet werden, die nicht in der Vordergrundprozessgruppe des Terminals sind, wenn dann versucht wird, von / zu lesen oder zu schreiben, die sie auch suspendieren. - sch
@sch: Ist der Prozess vs Gruppe nicht nur ein Unterschied in der Art wie das Signal gesendet wird? IIRC kill() lässt Sie senden SIGSTOP zu einer Gruppe in Ordnung. - Ben Voigt
Ja, mein Befehl handelte von dir CTRL-Z unterbricht den Prozess ... was Leute dazu verleiten könnte zu denken, dass es nur an einen Prozess gesendet wird, wenn es tatsächlich ein ist Job oder Prozessgruppe. - sch


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 wieder aufgenommen werden, indem Sie einfach den Befehl prompt eingeben:

fg %1

Wenn mehrere Prozesse pausiert sind, sollten Sie dies tun

jobs

um die Ausgabe zu sehen und die entsprechende Nummer auszuwählen, um z.B.

fg %3

nimmt den dritten Job in der Liste wieder auf. Sie können Jobs auch im Hintergrund mit ausführen lassen

bg %n

Wobei n die Jobnummer ist.


17
2018-03-27 11:52



Das sind Jobs (Prozessgruppen), keine Prozesse, mit denen sich CTRL-C, CTRL-Z, fg und bg befassen. - sch


Cntrl + Z pause the currently running process. 

Und

Cntrl + C simply terminates the running process.

Mit Cntrl + C können Sie den Prozess nicht fortsetzen. Mit Cntrl + Z können Sie den Vorgang fortsetzen.

Verwenden Sie fg% 1, um den Prozess fortzusetzen.


3
2018-03-13 06:48





STRG+Z stoppt (pausiert) einen Job

STRG+Cbeendet einen Job

Mit STRG+C Sie können den Vorgang nicht fortsetzen, aber mit STRG+Z Der Job kann wieder aufgenommen werden, indem Sie einfach an der Eingabeaufforderung eingeben:

fg% 1

Wenn Sie mehrere Prozesse pausiert haben, sollten Sie dies tun

Arbeitsplätze

um die Ausgabe zu sehen.


3
2017-07-03 15:57





Die vorherigen Antworten sind korrekt, aber aus einem unbekannten Grund setzt Strg-Z alle untergeordneten Prozesse ebenfalls aus, aber killall -SIGSTOP ... unterbricht nur den vordersten (übergeordneten) Prozess und lässt die Kinder so laufen, wie sie möchten.


2
2018-02-26 17:19