Каково различие между Ctrl-z и Ctrl-c в терминале?

Кто-либо может сказать мне различие между ctrl+z и ctrl+c?

Когда я нахожусь в терминале, оба, которые комбинации останавливают текущий процесс, но каково точно различие между обоими?

145
задан 16 March 2018 в 18:57

6 ответов

Если оставить крайние случаи в одну сторону, разница проста. Control + C почти сразу прерывает работу приложения, в то время как Control + Z переводит его в фоновый режим, приостанавливает.

Shell send различные сигналы для базовых приложений в этих комбинациях:

  • Control + C (управляющий символ intr ) отправляет SIGINT, который прерывает работу приложения. Обычно это приводит к прерыванию, но это зависит от приложения.

  • Control + Z (управляющий символ susp ) отправляет SIGTSTP в приложение переднего плана, эффективно поместил его в фоновый режим, приостановил. Это полезно, если вам нужно выйти из чего-то вроде редактора, чтобы взять необходимые данные. Вы можете вернуться в приложение, запустив fg (или % x , где x - номер задания, как показано в jobs ).

    Мы можем проверить это, запустив nano TEST ,затем нажмите Control + Z и запустите ps aux | grep ТЕСТ . Это покажет нам, что процесс nano все еще выполняется:

     oli 3278 0,0 0,0 14492 3160 точек / 4 T 13:59 0:00 nano TEST
     

    Далее, мы можем видеть (из того T, который находится в столбце состояния), что процесс был остановлен . Итак, он все еще жив, но не работает ... Его можно возобновить.

    Некоторые приложения будут аварийно завершены, если у них есть текущие внешние процессы (например, веб-запрос), которые могут отключиться по таймауту, пока они спят.

174
ответ дан 22 November 2019 в 22:56

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, все равно завершает свою работу или, по крайней мере, завершает выполнение задачи внутри нее

17
ответ дан 22 November 2019 в 22:56

Это должно помочь

Ctrl + Z используется для приостановки процесса, посылая ему сигнал SIGSTOP, который не может быть перехвачен программой. В то время как Ctrl + C используется для уничтожения процесса с помощью сигнала SIGINT и может быть перехвачен программой, чтобы она могла очистить себя перед выходом или не выйти вообще.

5
ответ дан 22 November 2019 в 22:56

, когда вы нажимаете ctrl + c , это означает, что вы отправляете SIGINT своему процессу. как вы набираете эту команду: kill -SIGINT . Это убьет ваш процесс. Поэтому вы не можете увидеть его, когда выполните команду ps .
Когда вы нажимаете ctrl + z , это означает, что вы отправляете SIGSTOP вашему процессу. как вы набираете эту команду: kill -SIGKSTOP . Это остановит ваш процесс, но процесс все еще жив. Таким образом, вы можете повторно активировать свой процесс, отправив SIGCONT вашему процессу.

4
ответ дан 22 November 2019 в 22:56

Ctrl + C используется для уничтожения процесса с помощью сигнала SIGINT , другими словами, это вежливо ] kill .

Ctrl + Z используется для приостановки процесса, отправив ему сигнал SIGTSTP , который похож на сигнал сна, который может быть отменено, и процесс может быть возобновлен снова.

Однако, когда процесс приостановлен, мы можем возобновить его снова с помощью fg (возобновить на переднем плане) и bg (возобновить в фоновом режиме) , но я не могу возобновить остановленный процесс, это разница между использованием Ctrl + C и Ctrl + Z .

Как мы можем просмотреть приостановленные процессы?

Команда jobs выдает следующий результат:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

Как убить приостановленный процесс в фоновом режиме?

Используя команду kill :

kill% n , где [11895 33] n - это номер, отображаемый командой jobs . Итак, если я хочу убить кота: kill% 1 .

19
ответ дан 22 November 2019 в 22:56

Поставить это просто:

  • CTRL - C запрашивает, чтобы программа прервала .

  • CTRL - Z заставляет программу выполнять приостановить и перейти в фоновый режим .

    Это позволяет вам возобновить его позже с помощью команды fg . Оставшиеся фоновые задачи удаляются при выходе из оболочки входа.

7
ответ дан 22 November 2019 в 22:56

Другие вопросы по тегам:

Похожие вопросы: