Кто-нибудь может сказать мне, в чем разница между ctrl+z и ctrl+c?
Когда я нахожусь в терминале, обе комбинации останавливают текущий процесс, но в чем именно разница между ними?
Кто-нибудь может сказать мне, в чем разница между ctrl+z и ctrl+c?
Когда я нахожусь в терминале, обе комбинации останавливают текущий процесс, но в чем именно разница между ними?
Если мы оставим крайние случаи в стороне, разница будет простой. Control+C прерывает приложение почти сразу, в то время как Control+Z отодвигает его на задний план, приостанавливает.
Оболочка посылает различные сигналы базовым приложениям в этих комбинациях:
Control+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, который находится в столбце состояния), что процесс был остановлен. Итак, он все еще жив, но не работает... Это может быть возобновлено.
Некоторые приложения будут аварийно завершаться, если у них есть текущие внешние процессы (например, веб-запрос), которые могут затянуться, пока они находятся в спящем режиме.
Ctrl+C используется для завершения процесса с помощью сигнала SIGINT
, другими словами , это вежливый убивать .
Ctrl+Z используется для приостановки процесса путем отправки ему сигнала SIGTSTP
, который подобен сигналу сна, который может быть отменен, и процесс может быть возобновлен снова.
Однако, когда процесс приостанавливается, мы можем возобновить его снова с помощью fg
(резюме на переднем плане) и bg
(возобновление в фоновом режиме), но я не могу возобновить прерванный процесс, в этом разница между использованием Ctrl+C & ;amp; Ctrl+Z.
Как мы можем вид приостановленные процессы?
То jobs
команда выдает вывод, подобный этому:
[1]- Stopped cat[2]+ Stopped vi
Как убивать приостановленный процесс в фоновом режиме?
С помощью kill
команда:
kill %n
где n
является ли число, отображаемое jobs
команда. Так что, если я захочу убить кэт: kill %1
.
Control+Z приостанавливает процесс (SIGTSTP
) и Control+C прерывает процесс (SIGINT
)
http://en.wikipedia.org/wiki/Control-Z
В Unix-подобных системах Control+Z является наиболее распространенным отображением клавиатуры по умолчанию для последовательности клавиш, которая приостанавливает процесс
http://en.wikipedia.org/wiki/Control-C
В системах POSIX последовательность приводит к тому, что активная программа получает сигнал SIGINT. Если программа не указывает, как обрабатывать это условие, она завершается. Обычно программа, которая обрабатывает SIGINT, все равно завершает саму себя или, по крайней мере, завершает задачу, выполняемую внутри нее
Проще говоря:
CTRL-C просит, чтобы программа выкинуть.
CTRL-Z приостанавливает программа и она остается резидентной в качестве фоновой задачи.
Приостановка программы позволяет вам возобновить ее позже с помощью команды fg
. Оставшиеся фоновые задачи завершаются при выходе из командной оболочки входа.
Обратите внимание, что CTRL-C только запросы что программа прерывается, и программа может проигнорировать запрос. CTRL-Z приостановит работу программы, если программа специально не отменит запрос.
Этот должно помочь
Ctrl+Z используется для приостановки процесса путем отправки ему сигнала SIGSTOP, который не может быть перехвачен программой. Пока Ctrl+C используется для завершения процесса с помощью signal SIGINT и может быть перехвачен программой, чтобы она могла очистить себя перед выходом или вообще не выходить.
когда вы нажимаете ctrl+c, это означает, что вы отправляете SIGINT своему процессу. например, вы вводите эту команду: kill -SIGINT <your_pid>
. Это убьет ваш процесс. Вот почему вы не можете видеть это, когда проблема пс команда.
Когда вы нажимаете ctrl+z, это означает, что вы отправляете SIGSTOP своему процессу. например, вы вводите эту команду: kill -SIGKSTOP <your_pid>
. Это остановит ваш процесс, но процесс все еще жив. Таким образом, вы можете повторно активировать свой процесс, отправив SIGCONT своему процессу.
Еще более близкое совпадение: В чем разница между Ctrl + Z и Ctrl + C в командной строке Unix? на [SU].
да, мне удалось понять разницу между тем и другим!!
Одна вещь, которую я хочу здесь добавить, это то, что большинство парней (в моем профессиональном кругу тоже) не делают различий между ними. И использовал опцию CTRL-Z для завершения команды. Что является неправильной практикой. Вы должны использовать CTRL-C во всех этих экземплярах. Поскольку CTRL-Z просто помещается в фоновом режиме. Таким образом, процесс не завершается до завершения, что может быть нежелательно для пользователя (большую часть времени), когда он нажимает CTRL-Z для завершения.
Я задал здесь очень похожий вопрос: shell - There are stopped jobs (on bash exit) - Unix & Linux Stack Exchange