Может ли кто-нибудь сказать мне разницу между ctrl + z и ctrl + c ?
Когда я нахожусь в терминале, обе комбинации останавливают текущий процесс, но какая именно разница между ними?
Может ли кто-нибудь сказать мне разницу между ctrl + z и ctrl + c ?
Когда я нахожусь в терминале, обе комбинации останавливают текущий процесс, но какая именно разница между ними?
Если мы оставляем граничные случаи в одну сторону, разница проста. Control + C прерывает приложение почти сразу, а Control + Z шунтирует его в фоновом режиме, приостановлено. р>
Оболочка посылает различные сигналы в базовые приложения в этих комбинациях:
Элемент управления + C (управляющий символ intr
) отправляет SIGINT, который прервет приложение. Обычно он прерывается, но это зависит от приложения, которое нужно решить.
Control + Z (управляющий символ susp
) отправляет SIGTSTP в приложение переднего плана, эффективно помещая его в фоновом режиме, приостановлено. Это полезно, если вам нужно вырваться из чего-то вроде редактора, чтобы пойти и захватить некоторые данные, которые вам нужны. Вы можете вернуться в приложение, запустив fg
(или %x
, где x
- номер задания, как показано в jobs
).
Мы можем проверить это, запустив nano TEST
, затем нажав Control + Z , а затем запустив ps aux | grep TEST
. Это покажет нам, что процесс nano
все еще запущен:
oli 3278 0.0 0.0 14492 3160 pts/4 T 13:59 0:00 nano TEST
Далее, мы можем видеть (из этого T, который находится в столбце состояния), что процесс был остановлен , Так что он все еще жив, но он не работает ... Его можно возобновить.
Некоторые приложения будут разбиваться, если у них есть текущие внешние процессы (например, веб-запрос), которые могут быть тайм-аут, пока они спят.
Control + Z приостанавливает процесс ( SIGTSTP
) и Control + C прерывает процесс ( SIGINT
) р>
В Unix-подобных системах Control + Z является наиболее распространенным по умолчанию сопоставлением клавиатуры для последовательности клавиш, которая приостанавливает процесс
В системах POSIX последовательность приводит к тому, что активная программа получает сигнал SIGINT. Если программа не указала, как обрабатывать это условие, она прекращается. Как правило, программа, которая обрабатывает SIGINT, по-прежнему завершает себя или, по крайней мере, завершает задачу, запущенную внутри нее
Ctrl + C используется для уничтожения процесса с сигналом SIGINT
, другими словами, это вежливый kill . р>
Ctrl + Z используется для приостановки процесса, отправив ему сигнал SIGSTOP , который похож на сигнал сна, который может быть отменить, и процесс снова можно возобновить.
Однако, когда процесс приостановлен, мы можем возобновить его снова fg (resume in forground)
и bg (resume in background)
, но я не могу возобновить убитый процесс, то есть разницу между использованием Ctrl + C & amp; CTRL + Z . Р>
Как просмотреть приостановленный процесс?
С помощью команды jobs вывод будет:
[1]- Stopped cat
[2]+ Stopped vi
Как убить приостановленный процесс в фоновом режиме?
Используя команду kill :
kill% n , где n будут отображаться номера в команде заданий, поэтому я хочу убить cat: kill %1
.
Это должно помочь р>
Ctrl + Z используется для приостановки процесса, отправив ему сигнал SIGSTOP, который не может быть перехвачен программой. В то время как Ctrl + C используется для уничтожения процесса с помощью сигнала SIGINT и может быть перехвачен программой, чтобы он мог очистить себя до выхода или не выйти все.
, когда вы нажимаете ctrl + c , это означает, что вы отправляете SIGINT в свой процесс. как вы набираете эту команду: kill -SIGINT <your_pid>
. Это убьет вас. Вот почему вы не можете увидеть его при выпуске команды ps .
Когда вы нажимаете ctrl + z , это означает, что вы отправляете SIGSTOP в свой процесс. как вы набираете эту команду: kill -SIGKSTOP <your_pid>
. Это остановит ваш процесс, но процесс все еще жив. Таким образом, вы можете повторно активировать свой процесс, отправив SIGCONT в ваш процесс. Р>
Проще говоря:
CTRL - C запрашивает, чтобы программа прервала .
CTRL - Z заставляет программу приостановить и перейти в фоновый режим .
Это позволяет вам возобновить его позже с помощью команды fg
. Оставшиеся фоновые задачи будут убиты при выходе из оболочки входа.