Может кто-нибудь сказать мне разницу между 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, который находится в столбце состояния), что процесс был остановлен . Так что он все еще жив, но не работает ... Его можно возобновить.
Некоторые приложения аварийно завершают работу, если у них есть текущие внешние процессы (например, веб-запрос), которые могут прерваться во время ожидания.
bg
(вместо fg
) отменить приостановку приложения, которое было Ctrl + Z, без возврата его на передний план; эффективно предоставляя вам контроль как над оболочкой, которая запустила приложение, так и над самим приложением, как если бы вы использовали &
при запуске приложения. Это часто бывает полезно, когда вы забыли начать с &
:)
fg
раз!
ctrl c
или ctrl z
? По умолчанию это SID (bash)?
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используется для уничтожения процесса с помощью сигнала SIGINT
, другими словами, это вежливое уничтожение .
Ctrl+ Z используется для приостановки процесса, посылая ему сигнал SIGTSTP
, который похож на сигнал ожидания, который можно отменить, и процесс можно возобновить снова.
Однако, когда процесс приостанавливается, мы можем возобновить его снова с помощью fg
(возобновить на переднем плане) и bg
(возобновить в фоновом режиме), но я не могу возобновить остановленный процесс, в этом разница между использованием Ctrl+ C& Ctrl+ Z.
Как мы можем просмотреть приостановленные процессы?
Команда jobs
выдает результат примерно так:
[1]- Stopped cat
[2]+ Stopped vi
Как убить приостановленный процесс в фоновом режиме?
С помощью kill
команды:
kill %n
где n
число, отображаемое jobs
командой. Так что если я хочу убить кота kill %1
.
Проще говоря:
CTRL-C просит, чтобы программа прервалась .
CTRL-Z заставляет программу приостанавливаться и уходить в фоновый режим .
Это позволяет вам возобновить его позже с помощью команды fg
. Оставшиеся фоновые задачи убиваются при выходе из оболочки входа в систему.
Это должно помочь
Ctrl+ Zиспользуется для приостановки процесса, посылая ему сигнал SIGSTOP, который не может быть перехвачен программой. Хотя Ctrl+ Cиспользуется для завершения процесса с помощью сигнала SIGINT, и может быть перехвачен программой, чтобы он мог очистить себя перед выходом или вообще не выходить.
SIGTSTP
, который может быть пойман программой. Есть четыре различных сигналов, которые могут приостановить программу SIGSTOP
, SIGTSTP
, SIGTTIN
, SIGTTOU
. Из них только SIGSTOP
нельзя заблокировать. Остальные три используются терминалом для остановки процесса при других условиях.
когда вы нажимаете ctrl+ c, это означает, что вы отправляете SIGINT в свой процесс. как вы вводите следующую команду: kill -SIGINT <your_pid>
. Это убьет тебя в твоем процессе. Вот почему вы не можете увидеть это, когда выполните команду ps .
Когда вы нажимаете ctrl+ z, это означает, что вы отправляете SIGSTOP в свой процесс. как вы вводите следующую команду: kill -SIGKSTOP <your_pid>
. Это остановит ваш процесс, но процесс все еще жив. Таким образом, вы можете повторно активировать свой процесс, отправив SIGCONT вашему процессу.