Ctrl+ Zstoppt den Job, während Ctrl+ Cden Job beendet.
Warum das? Wäre der andere Weg nicht sinnvoller?
z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]- Running sleep 100 &
[2]+ Running sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+ Stopped sleep 100
z@z-lap:~$ jobs
[1]+ Stopped sleep 100
[2]- Running sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+ Running sleep 200 &
bash
shell
signals
job-control
neo0
quelle
quelle
Antworten:
Ich glaube, Sie sind möglicherweise verwirrt über die Jobkontrollnotation. Insbesondere bedeutet "Gestoppt", dass ein Job noch aktiv ist, aber dass seine Fähigkeit, etwas zu verarbeiten, angehalten wurde (die CPU hat keine Zeit, etwas zu verarbeiten). Dies ist praktisch ein "Pause" - oder "Suspended" -Zustand, obwohl dies nicht der richtige Fachbegriff ist.
CtrlCstoppt einen Job nicht, sondern bricht ihn ab oder beendet ihn. Technisch bedingt dies, dass ein Interrupt-Signal an das Programm gesendet wird, das es auffordert, den Vorgang abzubrechen und sofort zu beenden. Einige Programme hören dieses Signal und führen vor dem Beenden einige Notbereinigungsarbeiten an sich selbst durch. Andere reagieren nicht auf das Signal und werden anschließend einfach abgebrochen.
CtrlZHält andererseits einen Job an. Auch dies geschieht mit einem Signal, aber diesmal ist es ein "Stopp" anstelle eines "Interrupt" -Signals. Dadurch wird es effektiv angehalten und die Kontrolle an die Shell zurückgegeben, der Job wird jedoch nicht beendet. Wenn Sie möchten, dass ein solcher Job weiter ausgeführt wird, können Sie einen
bg
Befehl absetzen, um den zuletzt gestoppten Job an den Hintergrund zu senden. Es wird dann als Hintergrundjob weiter ausgeführt, als ob Sie es mit ausgeführt hätten&
. Sie können auch verwendenfg
, um den zuletzt angehaltenen Job im Vordergrund fortzusetzen (sodass er dort fortgesetzt wird, wo er aufgehört hat, und Sie erneut mit ihm interagieren können).quelle
CTRL+C=SIGINT
undCTRL+Z=SIGTSTP
.