Может кто-нибудь сказать мне разницу между 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 вашему процессу.