Czy ktoś może mi powiedzieć różnicę między ctrl+ za ctrl+ c?
Kiedy jestem w terminalu, obie kombinacje zatrzymują bieżący proces, ale jaka dokładnie jest różnica między nimi?
Czy ktoś może mi powiedzieć różnicę między ctrl+ za ctrl+ c?
Kiedy jestem w terminalu, obie kombinacje zatrzymują bieżący proces, ale jaka dokładnie jest różnica między nimi?
Odpowiedzi:
Jeśli zostawimy skrzynie z boku z boku, różnica jest prosta. Control+ Cprzerywa aplikację niemal natychmiast, podczas gdy Control+ Zprzetacza ją w tło, zawieszając.
Powłoka wysyła różne sygnały do podstawowych aplikacji w tych kombinacjach:
Control+ C(znak kontrolny intr
) wysyła SIGINT, który przerywa aplikację. Zwykle powoduje przerwanie, ale decyzja należy do aplikacji.
Control+ Z(znak kontrolny susp
) wysyła SIGTSTP do aplikacji na pierwszym planie, skutecznie umieszczając go w tle, zawieszając. Jest to przydatne, jeśli chcesz wydostać się z edytora, aby pobrać potrzebne dane. Możesz wrócić do aplikacji, uruchamiając fg
(lub %x
gdzie x
jest numer zadania, jak pokazano na jobs
).
Możemy to przetestować, uruchamiając nano TEST
, a następnie naciskając Control+, Za następnie uruchamiając ps aux | grep TEST
. To pokaże nam, że nano
proces jest nadal uruchomiony:
oli 3278 0.0 0.0 14492 3160 pts/4 T 13:59 0:00 nano TEST
Ponadto możemy zobaczyć (z tej litery T, która znajduje się w kolumnie statusu), że proces został zatrzymany . Więc wciąż żyje, ale nie działa ... Można go wznowić.
Niektóre aplikacje ulegną awarii, jeśli będą miały trwające procesy zewnętrzne (takie jak żądanie sieciowe), które mogą przekroczyć limit czasu podczas snu.
bg
(zamiast fg
), aby cofnąć zawieszenie aplikacji, która była Ctrl + Z'ed bez umieszczania jej z powrotem na pierwszym planie; skutecznie dając ci kontrolę zarówno nad powłoką, która uruchomiła aplikację, jak i samą aplikacją, tak jakbyś używał jej &
podczas uruchamiania aplikacji. Często przydaje się, gdy zapomniałeś zacząć od &
:)
fg
ponownie!
ctrl c
lub ctrl z
? Domyślnie jest to SID (bash)?
Control+ Zzawiesza proces ( SIGTSTP
) i Control+ Cprzerywa proces ( SIGINT
)
http://en.wikipedia.org/wiki/Control-Z
W systemach uniksowych, Control + Z jest najczęstszym domyślnym mapowaniem klawiatury dla sekwencji klawiszy, która wstrzymuje proces
http://en.wikipedia.org/wiki/Control-C
W systemach POSIX sekwencja powoduje, że aktywny program odbiera sygnał SIGINT. Jeśli program nie określi sposobu obsługi tego warunku, zostanie zakończony. Zazwyczaj program, który obsługuje SIGINT, sam się zakończy lub przynajmniej zakończy zadanie w nim działające
Ctrl+ Csłuży do zabicia procesu sygnałem SIGINT
, innymi słowy jest to grzeczne zabicie .
Ctrl+ Z służy do zawieszenia procesu poprzez wysłanie sygnału SIGTSTP
, który jest jak sygnał uśpienia, który można cofnąć i proces można wznowić ponownie.
Jednak gdy proces jest zawieszony, możemy go wznowić przez fg
(wznowienie na pierwszym planie) i bg
(wznowienie w tle), ale nie mogę wznowić zabitego procesu, to jest różnica między używaniem Ctrl+ Ci Ctrl+ Z.
Jak możemy zobaczyć zawieszone procesy?
jobs
Komenda daje wyjście tak:
[1]- Stopped cat
[2]+ Stopped vi
Jak zabić zawieszony proces w tle?
Za pomocą kill
polecenia:
kill %n
gdzie n
jest liczbą wyświetlaną przez jobs
polecenie. Więc jeśli chcesz zabić kota: kill %1
.
Mówiąc prosto:
CTRL-C żąda przerwania programu .
CTRL-Z zmusza program do zawieszenia i przejścia w tło .
Umożliwia to wznowienie go później za pomocą polecenia fg
. Pozostałe zadania w tle są zabijane po wyjściu z powłoki logowania.
To powinno pomóc
Ctrl+ Zsłuży do zawieszenia procesu poprzez wysłanie mu sygnału SIGSTOP, którego program nie może przechwycić. Podczas gdy Ctrl+ Cjest używany do zabicia procesu z sygnałem SIGINT, i może zostać przechwycony przez program, aby mógł wyczyścić się przed wyjściem lub w ogóle nie wyjść.
SIGTSTP
, co może zostać złapane przez program. Istnieją cztery różne sygnały, które mogą zawiesić program SIGSTOP
, SIGTSTP
, SIGTTIN
, SIGTTOU
. Tylko tych SIGSTOP
nie można zablokować. Pozostałe trzy są używane przez terminal do zatrzymania procesu w różnych warunkach.
kiedy naciśniesz ctrl+ c, oznacza to, że wysyłasz SIGINT do swojego procesu. jak wpisać komendę: kill -SIGINT <your_pid>
. Zabije cię twój proces. Dlatego nie możesz tego zobaczyć po wydaniu polecenia ps .
Kiedy naciśniesz ctrl+ z, oznacza to, że wysyłasz SIGSTOP do swojego procesu. jak wpisać komendę: kill -SIGKSTOP <your_pid>
. Zatrzyma twój proces, ale proces wciąż żyje. Abyś mógł ponownie aktywować proces, wysyłając SIGCONT do swojego procesu.