Часто используемые комбинации клавиш в терминале, такие как Ctrl + C, Ctrl + D и Ctrl + Z, предназначены для завершения работы программы на переднем плане (foreground) и возвращения управления Bash.

Ctrl + C выполняет остановку выполнения процесса, фактически завершая его работу. Действие Ctrl + D приводит к аналогичному результату, но различие заключается в внутренней механике выполнения.

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

В то время как Ctrl + D сообщает терминалу о конце ввода, регистрируя EOF (End of File), что Bash интерпретирует как завершение текущей программы.

В определённых программах оба метода могут действовать, но иногда только один из них. Например, команда cat без параметров запускается в интерактивном режиме, отражая введенные данные на экран после нажатия Enter. Здесь для выхода можно использовать как Ctrl + C, так и Ctrl + D.

Прерывание команды cat

Для завершения работы интерпретатора Python Ctrl + C не поможет.

Выход из интерпретатора Python в терминале

Комбинация Ctrl + Z отправляет процессу сигнал остановки, что приводит к его приостановке в системе, как бы "замораживая" его. В таком случае процесс переходит в фоновый режим. Если необходимо возобновить его выполнение в фоне, можно использовать команду bg. В то время как команда fg восстанавливает выполнение процесса на передний план.

Остановка процесса и возврат его в foreground

На изображении показано, как сначала запускается интерпретатор Python, затем его работа приостанавливается через Ctrl + Z. Командой fg python3 мы продолжаем выполнение программы, делая её активной. Об этом свидетельствует сохранение переменной a со значением.

Для просмотра активных в Bash процессов можно воспользоваться командой ps (с параметрами для доступа к другим процессам). Команда kill служит для завершения ненужных процессов.

Удаление процесса с помощью команды kill

Здесь команда cat сначала запускается, а затем приостанавливается. Мы просматриваем список процессов и берем параметр -9 в команде kill, чтобы полностью завершить процесс, указав его идентификационный номер (PID).

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

Задание

Если в терминале запущены одноимённые процессы и они переведены в фон, с помощью команды fg имя_программы нельзя сделать один из них активным. FG также не принимает PID как аргумент. Для этого используется идентификатор процесса, выданный командой jobs, в формате %ID при использовании с fg.

Выполните команды sleep 10min и sleep 10s, останавливая каждую через Ctrl + Z. Определите идентификаторы процессов с помощью jobs и выводите из фона десятисекундный sleep. Было ли учтено время, когда процесс был остановлен? Затем активируйте и прервите десятиминутный sleep.

Вопросы для самопроверки:

  1. Какие клавиши используются для завершения работы программы на переднем плане в терминале?
  2. Какой эффект оказывает Ctrl + Z на процесс в системе?
  3. Какую команду необходимо использовать для возобновления приостановленного процесса в фоновом режиме?
  4. Для чего используется команда ps в Bash?
  5. Какой параметр используется с командой kill для полного завершения процесса?
  6. Как обозначаются комбинации клавиш с Ctrl в большинстве консольных приложений?

Программа курса:

  1. Описание курса
  2. История операционной системы Linux
  3. Основы лицензии GNU GPL и её преимущества
  4. Функции и структура ядра Linux-систем
  5. Структура и каталоги файловой системы Linux
  6. Основные типы файлов в системе Linux
  7. Интерфейс командной строки в Linux
  8. Командная оболочка Bash в Linux
  9. Использование параметров команд в Bash
  10. Использование Ctrl+C, Ctrl+D и Ctrl+Z
  11. Автодополнение и история команд в Bash
  12. Перенаправление ввода и вывода в Bash
  13. Документация Linux и Man-страницы
  14. Абсолютная и относительная адресация в Linux
  15. Команда ls - как просматривать каталоги в Linux
  16. Копирование, перемещение и удаление в Linux
  17. Жесткие и символьные ссылки в Linux
  18. Создание жестких и символических ссылок в Linux
  19. Права доступа к файлам и каталогам в Linux
  20. Изменение прав доступа к файлам с помощью chmod
  21. Использование шаблонов имен файлов в Linux
  22. Поиск файлов в Linux с помощью команды find
  23. Использование команды sudo в Linux
  24. Управление пакетами с помощью APT в Linux