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

Czym różni się Ctrl+Z i Ctrl+C w linii poleceń Uniksa?

Używam Mac OS X Terminal. I używam Ctrl+Z lub Ctrl+C do zatrzymywania niektórych programów. Ale zdałem sobie sprawę, że nie wiem, co dokładnie robią. Czym one są i jaka jest różnica między nimi?

This question was a * Super User Question of the Week . Read the March 13, 2011 * blog entry for more details or * submit your own ** Question of the Week.

Odpowiedzi (6)

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

Control+Z służy do wstrzymania procesu poprzez wysłanie sygnału SIGSTOP, który nie może zostać przechwycony przez program. Podczas gdy Control+C jest używane do zabicia procesu sygnałem SIGINT i może być przechwycone przez program tak, że może on oczyścić siebie przed zakończeniem, lub w ogóle nie wyjść.

Jeśli zawiesi się proces, pojawi się to w powłoce, aby powiedzieć, że został on zawieszony:

[1]+ Stopped yes

Jeśli jednak go zabijesz, nie zobaczysz innego potwierdzenia niż upuszczenie go z powrotem do zachęty powłoki. Kiedy zawieszasz proces, możesz również robić z nim fantazyjne rzeczy. Na przykład, uruchomienie tego:

fg

Z zawieszonym programem przywróci go na pierwszy plan.

A uruchomienie polecenia

bg

Z zawieszonym programem pozwoli na jego uruchomienie w tle (jednak wyjście programu nadal będzie przechodziło do TTY).

Jeśli chcesz zabić zawieszony program, nie musisz go najpierw sprowadzać z fg, możesz po prostu wykonać komendę:

kill %1

Jeśli masz wiele zawieszonych komend, uruchomienie

jobs

wyświetli je w ten sposób:

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

Użycie %#, gdzie # jest numerem zadania (ten w nawiasach kwadratowych z wyjścia jobs) z bg, fg, lub kill, może być użyte do wykonania akcji na tym zadaniu.

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

Ctrl+Z zawiesza proces z SIGTSTP, możesz go później wznowić. Ctrl+C zabija proces za pomocą SIGINT, który kończy proces, chyba że jest obsługiwany/zaczytywany przez cel, więc nie można go wznowić. Istnieje również SIGSTOP, który może być wysłany przez kill() i którego proces nie może przechwycić. SIGSTOP jest odpowiednikiem zarówno SIGSTOP jak i SIGTSTP, które nie zawieszają procesu.

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

CTRL+Z zatrzymuje (wstrzymuje) zadanie

CTRL+C kończy zadanie

z CTRL+C nie możesz wznowić procesu, ale z CTRL+Z zadanie można wznowić wpisując na promecie poleceń:

fg %1

jeśli masz wiele procesów wstrzymanych to powinieneś zrobić

jobs

aby zobaczyć wyjście i wybrać odpowiednią liczbę do wznowienia e. g.

fg %3

wznawia trzecią pracę z listy. Możesz też mieć zadania uruchomione w tle z

bg %n

gdzie n jest numerem zadania.

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

CTRL+Z zatrzymuje (pauzuje) zadanie

CTRL+C kończy zadanie

Z CTRL+C nie możesz wznowić procesu, ale z CTRL+Z zadanie można wznowić wpisując w wierszu poleceń:

fg %1

Jeśli masz wiele procesów wstrzymanych to powinieneś zrobić

jobs

aby zobaczyć wyjście.

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

Używając Cntrl + C nie można wznowić procesu. gdzie tak jak przy użyciu Cntrl + Z można wznowić proces.

użyj fg %1 aby wznowić proces.

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

Poprzednie odpowiedzi są poprawne, ale z jakiegoś nieznanego powodu Ctrl-Z również zawiesza wszystkie procesy dziecięce, ale killall -SIGSTOP … tylko zawiesza proces najbardziej frontalny (rodzicielski) i pozostawia dzieci do biegania jak chcą.