Часто используемые комбинации клавиш в терминале, такие как 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.
Для завершения работы интерпретатора Python Ctrl + C не поможет.
Комбинация Ctrl + Z отправляет процессу сигнал остановки, что приводит к его приостановке в системе, как бы "замораживая" его.
В таком случае процесс переходит в фоновый режим. Если необходимо возобновить его выполнение в фоне, можно использовать команду
bg
. В то время как команда fg
восстанавливает выполнение процесса на передний план.
На изображении показано, как сначала запускается интерпретатор Python, затем его работа приостанавливается через Ctrl + Z.
Командой fg python3
мы продолжаем выполнение программы, делая её активной. Об этом свидетельствует сохранение
переменной a со значением.
Для просмотра активных в Bash процессов можно воспользоваться командой ps
(с параметрами для доступа к другим
процессам). Команда kill
служит для завершения ненужных процессов.
Здесь команда cat сначала запускается, а затем приостанавливается. Мы просматриваем список процессов и берем параметр -9
в команде kill, чтобы полностью завершить процесс, указав его идентификационный номер (PID).
В большинстве консольных приложений комбинации клавиш с Ctrl обозначаются как ^C, ^Z и т.д., где ^ заменяет Ctrl.
Задание
Если в терминале запущены одноимённые процессы и они переведены в фон, с помощью команды fg имя_программы
нельзя сделать
один из них активным. FG также не принимает PID как аргумент. Для этого используется идентификатор процесса, выданный командой jobs,
в формате %ID при использовании с fg.
Выполните команды sleep 10min
и sleep 10s
, останавливая каждую через Ctrl + Z.
Определите идентификаторы процессов с помощью jobs и выводите из фона десятисекундный sleep. Было ли учтено время, когда процесс
был остановлен? Затем активируйте и прервите десятиминутный sleep.