ctrl c vs. ctrl z z zadaniem pierwszoplanowym


26

Ctrl+ Zzatrzymuje pracę, podczas gdy Ctrl+ Czabija pracę.

Dlaczego? Czy inny sposób nie miałby większego sensu?

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 &

4
„Czy inny sposób nie miałby większego sensu?” Czy możesz określić, dlaczego tak uważasz?
glglgl

Odpowiedzi:


55

Myślę, że możesz być zdezorientowany notacją kontroli pracy. Zwłaszcza „Zatrzymane” oznacza, że ​​zadanie jest nadal aktywne, ale jego zdolność do przetwarzania czegokolwiek została wstrzymana (procesor nie ma czasu na przetwarzanie). Jest to w rzeczywistości stan „Pauza” lub „Zawieszony”, chociaż nie jest to prawidłowy termin techniczny.

  • CtrlCnie „zatrzymuje” zadania, anuluje je lub zabija. Technicznie powoduje to wysłanie do programu sygnału przerwania, nakazującego mu przerwanie tego, co robi i natychmiastowe wyjście. Niektóre programy usłyszą ten sygnał i wykonają samodzielnie prace awaryjnego czyszczenia przed wyjściem. Inni nie będą reagować na sygnał, a następnie zostaną po prostu przerwani.

  • CtrlZz drugiej strony „zatrzymuje” pracę. Ponownie odbywa się to za pomocą sygnału, ale tym razem jest to sygnał „stop” zamiast sygnału „przerwa”. To skutecznie wstrzymuje go i przywraca kontrolę nad powłoką, ale tak naprawdę nie zabija zadania. Jeśli chcesz, aby takie zadanie nadal działało, możesz następnie wydać bgpolecenie wysłania ostatniego zatrzymanego zadania w tło. Następnie będzie działał jako zadanie w tle, tak jakbyś go najpierw uruchomił &. Możesz także użyć, fgaby wznowić ostatnio zatrzymane zadanie na pierwszym planie (pozwalając mu kontynuować od miejsca, w którym zostało przerwane, i pozwalając na ponowne interakcję z nim).


Nadal uważam, że Ctrl + Z wyśle ​​SIGKILL, a Ctrl + C wyśle ​​SIGINIT. Więc Ctrl + Z również zabije pracę. Ale z mojego przykładu Ctrl + Z tylko zatrzymuje pracę, jak powiedziałeś. To mnie trochę zdezorientowało.
neo0

10
@ neo0 - może jesteś przyzwyczajony do dziwnych niestandardowych ustawień? Możesz skonfigurować te rzeczy - choć prawdopodobnie nie powinieneś, gdybyś miał aplikację opartą na tych mapach. Ale domyślna konfiguracja to CTRL+C=SIGINTi CTRL+Z=SIGTSTP.
mikeserv

3
Caleb ma rację (+1). Ctrl-Z zatrzymuje program, który powinieneś uznać za „zamrażający” go, ale ten program wciąż jest w pamięci, pliki są otwierane itp. Nie jest zabijany / przerywany.
Olivier Dulac

„Zawieszenie” może być wyraźniejsze niż „zatrzymanie”.
Russell Borogove

1
@jiggunjer Chodzi o kształt rzeczy. Ta odpowiedź zawiera pewne informacje na temat powodów, dla których wymagane są dwa kroki, a ta wprowadza niektóre funkcje, aby uczynić te kroki bardziej bezbolesnymi.
Caleb,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.