Русские Блоги
Разница между bg, fg, ctrl + z, ctrl + d и ctrl + c в Linux
fg, bg, jobs, &, ctrl + z — все они связаны с системными задачами. Хотя эти команды сейчас в основном не нужны, также очень удобно изучать
Один. & Чаще всего используется
Это используется в конце команды, которая может быть выполнена в фоновом режиме
Вы можете приостановить выполнение команды на переднем плане
Три. работы
Посмотрите, сколько команд работает в фоновом режиме
результаты выполнения команды заданий,+ (Знак плюс)Указывает, что это текущая работа,— (знак минус)Представляет задание после текущего задания. Параметр jobs -l отображает PID всех заданий.
Статус заданий может быть запущен, остановлен, завершен, но если задача убита, оболочка удаляет идентификатор процесса задачи из списка, известного текущей среде оболочки;
Другими словами, команда jobs отображает информацию о задачах, выполняющихся в фоновом режиме или приостановленных в текущей среде оболочки;
[1] означает, что номер задания равен 1, PID — это идентификационный номер процесса, состояние заданий останавливается, после чего следует команда.
Внутривенно фг
Переместите команды в фоновом режиме на передний план, чтобы продолжить выполнение
Если в фоновом режиме есть несколько команд, вы можете использовать fg% jobnumber для вызова выбранной команды.% Jobnumber — это порядковый номер команды, выполняемой в фоновом режиме (не pid), найденной с помощью команды jobs.
Используйте vim, чтобы открыть git.txt и запустить его на переднем плане. Вы можете нажать ctrl + Z, чтобы приостановить его, и bg будет работать в фоновом режиме.
Измените приостановленную команду в фоновом режиме, чтобы продолжить выполнение
Вы можете использовать bg% num, чтобы изменить состояние приостановленного задания с остановленного на выполнение и по-прежнему выполнять его в фоновом режиме. Когда вам нужно изменить выполнение на переднем плане, выполните команду fg% num;
- [[email protected] ~]$ pct
- # Клавиатура ввода Ctrl + Z
- ^Z
- [1]+ Stopped pct
- [[email protected] ~]$ jobs -l
- [1]+ 5270 Stopped pct
- [[email protected] ~]$ bg %1
- [1]+ pct &
- [[email protected] ~]$ jobs -l
- [1]+ 5270 Running pct &
Вышеуказанный pct представляет собой программу с графическим интерфейсом пользователя. Неграфический пользовательский интерфейс немного отличается.
Если в фоновом режиме есть несколько команд, вы можете использовать bg% jobnumber для вызова выбранной команды.% Jobnumber — это серийный номер команды, выполняемой в фоновом режиме, найденной командой jobs (не pid).
Использование команд Shell для управления выполнением заданий в Linux
Следующие команды могут использоваться для управления задачами процесса:
Ps список запущенных процессов в системе;
Kill отправляет сигнал одному или нескольким процессам (часто используется для уничтожения процесса);
Jobs отображает состояние задач, которые были запущены в текущей среде оболочки. Если не задан ни один jobid, отображается вся информация о состоянии активной задачи;
Если сообщается о завершении задачи (т. Е. Статус задачи помечается как завершенный), оболочка удаляет идентификатор процесса задачи из списка, известного текущей среде оболочки;
Bg перемещает процесс в фоновый режим (Background);
Fg перемещает процесс на передний план (Foreground);
—— перевод задания в фоновый режим
Если вы часто работаете с X-графикой, у вас может возникнуть такой опыт: запустить программу с графическим интерфейсом через команды терминала, интерфейс с графическим интерфейсом появится, но ваш терминал все еще на месте, и вы не сможете продолжать выполнять другие команды в оболочке, если только Закройте программу с графическим интерфейсом.
Чтобы терминал мог продолжать принимать команды после выполнения программы, вы можете переместить процесс в фоновый режим и запустить программу, используя следующую команду: # Предположим, что xmms запущен
После открытия pct, как это, окно терминала возвращается. Теперь pct работает в фоновом режиме, но если вы забудете использовать «&» при запуске программы, вы не захотите ее повторно выполнять;
Вы можете использовать ctrl + z, чтобы приостановить программу, а затем ввести команду bg, чтобы программа продолжала работать в фоновом режиме.
Концепция: текущее задание
Если есть два номера фоновых задач, [1], [2], если первая фоновая задача успешно выполнена, а вторая фоновая задача все еще выполняется, текущая Задача автоматически станет фоновой задачей с номером фоновой задачи «[2]».
Таким образом, можно сделать вывод, что текущая задача изменится. Когда пользователь вводит команды, такие как «fg», «bg» и «stop», если кавычки не добавляются, все изменения являются текущей задачей.
==== Приостановка процесса переднего плана: ctrl+Z;
==== Прекращение процесса:
—- —- Завершение фонового процесса:
Способ 1. Используйте команду jobs, чтобы просмотреть номер задания (при условии, что это num), а затем выполните kill% num.$ kill %1
Метод 2. Просмотрите идентификатор процесса (PID, pid) задания с помощью команды ps, а затем выполните kill pid$ kill 5270
—- Завершение процесса переднего плана:ctrl+c
другие функции kill: kill может не только завершить процесс, но и отправить другие сигналы процессу, использоватьkill -lВы можете проверить сигналы, поддерживаемые kill. SIGTERM — это сигнал, посылаемый kill без параметров,
Это означает, что процесс завершается, но будет ли он выполняться или нет, зависит от того, поддерживает ли его процесс. Если процесс не завершен, вы можете использовать kill -SIGKILL pid, который является ядром для завершения процесса, процесс не может прослушивать этот сигнал.
Ctrl + c принудительно прерывает выполнение текущей программы.
Если ctrl + d означает завершение текущего ввода (то есть пользователь больше не выдает инструкции для текущей программы), то Linux обычно завершает текущую программу.
Ctrl + z означает, что текущий передний план часто запускается в фоновом режиме и приостанавливается. Если вам нужно продолжить работу в фоновом режиме, вам нужно использовать «bg process number» для продолжения работы, а затем использовать «fg process number» для переднего плана фонового процесса. ,
—— ctrl + c, ctrl + d, ctrl + z в Linux означает:
Ctrl-c отправляет сигнал SIGINT всем процессам в группе процессов переднего плана. Обычно используется для завершения работающей программы.
ctrl-z отправляет сигнал SIGTSTP всем процессам в группе процессов переднего плана, которая часто используется для приостановки процесса.
Вместо отправки сигнала ctrl-d означает специальное двоичное значение, которое означает EOF.
Отправьте сигнал SIGQUIT всем процессам в группе процессов переднего плана, завершите процесс переднего плана и сгенерируйте файл ядра.
—— Key Function
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl-q Resume output
Ctrl-o Discard output
Ctrl-l Clear screen
Ctrl + C, Ctrl + D, Ctrl + Z
Комбинации клавиш Ctrl + C, Ctrl + D и Ctrl + Z часто используются в терминале для выхода из программы, работающей на переднем плане (foreground), и передачи управления Bash.
Ctrl + C выполняет прерывание процесса. По-сути убивает его. Результат действия Ctrl + D такой же. Однако разница между этими двумя способами выхода есть, и заключается она во внутреннем механизме.
Нажатие Ctrl + C заставляет терминал послать сигнал SIGINT процессу, который на данный момент его контролирует. Когда foreground-программа получает сигнал SIGINT , она обязана прервать свою работу.
Нажатие Ctrl + D говорит терминалу, что надо зарегистрировать так называемый EOF (end of file – конец файла), то есть поток ввода окончен. Bash интерпретирует это как желание выйти из программы.
При работе в конкретной программе могут срабатывать оба способа, но может только один. Так команда cat без параметров запускается в интерактивном режиме, в котором то, что вы ввели, будет тут же выводиться на экран после нажатия Enter . Выйти из программы можно как с помощью Ctrl + С , так и Ctrl + D .
Выйти из интерпретатора Питона с помощью Ctrl + C нельзя.
Комбинация клавиш Ctrl + Z посылает процессу сигнал, который приказывает ему остановиться. Это значит, что процесс остается в системе, но как бы замораживается. Само собой разумеется он уходит в бэкграунд (background) – в фоновый режим. С помощью команды bg его можно снова запустить, оставив при этом в фоновом режиме. Команда fg не только возобновляет ранее приостановленный процесс, но и выводит его из фона на передний план.
На скриншоте сначала запускается интерпретатор Питона. Далее его работа останавливается с помощью Ctrl + Z . Командой fg python3 мы возобновляем работу приложения и делаем его текущим. То, что мы вернулись в тот же самый процесс, видно по переменной a , значение которой остается доступным.
С помощью команды ps можно посмотреть процессы текущего сеанса Bash (используя ключи можно просматривать и другие процессы). А команда kill позволяет удалять ненужные.
Здесь запускается cat и приостанавливается. Далее смотрим список процессов. Ключ -9 команды kill обозначает, что мы хотим полностью избавиться от процесса. В качестве аргумента передается идентификационный номер процесса (PID).
Отметим, что во многих консольных программах управляющие комбинации с клавишей Ctrl обычно обозначаются как ^C , ^Z и т. п. То есть вместо Ctrl используется знак ^ .
Также обратим внимание, что понятие «процесса» связано с понятием «одновременного выполнения нескольких программ». Процесс – это выполняющаяся программа, а точнее экземпляр выполняющейся программы, потому что в системе может существовать несколько процессов, запущенных на основе одной программы. Ядром операционной системы создается видимость одновременного выполнения множества процессов.
При необходимости системный администратор может запускать процессы, требующие длительного выполнения, в бэкграунде, а на «переднем плане» выполнять другие команды. Запустить процесс в фоне можно с помощью знака амперсанда & , который записывается в конце команды.
Если в текущем терминале было запущено и переведено в фон несколько одноименных процессов, то сделать один из них текущим с помощью команды fg имя_программы не получится. PID также не используется как аргумент для fg . Здесь используется идентификатор процесса, который возвращает команда jobs . Причем для fg его надо использовать в формате %ID .
Выполните команды sleep 10m и sleep 10s , каждую остановите с помощью Ctrl + Z . Посмотрите идентификаторы процессов с помощью jobs . Выведите из бэкграунда десятисекундный слип. Учитывалось ли время, когда процесс был остановлен? После этого сделайте текущим десятиминутный слип и прервите его.
Курс с ответами к заданиям и дополнительными уроками в PDF
Введение в Linux и Bash. Курс