В чем разница между 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, который находится в столбце состояния), что процесс был остановлен. Итак, он все еще жив, но не работает... Это может быть возобновлено.

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