Может кто-нибудь сказать мне разницу между ctrl+ zи ctrl+ c?
Когда я нахожусь в терминале, обе комбинации останавливают текущий процесс, но какая именно разница между ними?
command-line
Чайтанья Лаккунди
источник
источник
Ответы:
Если мы оставим крайние случаи в одну сторону, разница будет простой. 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
процесс все еще выполняется:Кроме того, мы можем видеть (из этого 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
http://en.wikipedia.org/wiki/Control-C
источник
Ctrl+ Cиспользуется для уничтожения процесса с помощью сигнала
SIGINT
, другими словами, это вежливое уничтожение .Ctrl+ Z используется для приостановки процесса, посылая ему сигнал
SIGTSTP
, который похож на сигнал ожидания, который можно отменить, и процесс можно возобновить снова.Однако, когда процесс приостанавливается, мы можем возобновить его снова с помощью
fg
(возобновить на переднем плане) иbg
(возобновить в фоновом режиме), но я не могу возобновить остановленный процесс, в этом разница между использованием Ctrl+ C& Ctrl+ Z.Как мы можем просмотреть приостановленные процессы?
Команда
jobs
выдает результат примерно так:Как убить приостановленный процесс в фоновом режиме?
С помощью
kill
команды:kill %n
гдеn
число, отображаемоеjobs
командой. Так что если я хочу убить котаkill %1
.источник
Проще говоря:
CTRL-C просит, чтобы программа прервалась .
CTRL-Z заставляет программу приостанавливаться и уходить в фоновый режим .
Это позволяет вам возобновить его позже с помощью команды
fg
. Оставшиеся фоновые задачи убиваются при выходе из оболочки входа в систему.источник
Это должно помочь
источник
SIGTSTP
, который может быть пойман программой. Есть четыре различных сигналов, которые могут приостановить программуSIGSTOP
,SIGTSTP
,SIGTTIN
,SIGTTOU
. Из них толькоSIGSTOP
нельзя заблокировать. Остальные три используются терминалом для остановки процесса при других условиях.когда вы нажимаете ctrl+ c, это означает, что вы отправляете SIGINT в свой процесс. как вы вводите следующую команду:
kill -SIGINT <your_pid>
. Это убьет тебя в твоем процессе. Вот почему вы не можете увидеть это, когда выполните команду ps .Когда вы нажимаете ctrl+ z, это означает, что вы отправляете SIGSTOP в свой процесс. как вы вводите следующую команду:
kill -SIGKSTOP <your_pid>
. Это остановит ваш процесс, но процесс все еще жив. Таким образом, вы можете повторно активировать свой процесс, отправив SIGCONT вашему процессу.источник