В предыдущей статье вы имели возможность ознакомиться с командами ps, kill и nice. В данном руководстве речь пойдёт о том, как управлять процессами bash.
Руководство сосредоточено на управлении приоритетными и фоновыми процессами. С его помощью вы научитесь использовать функции управления заданиями оболочки и сделать процессы более гибкими.
Управление приоритетными процессами
Большинство процессов, запущенных на машине Linux, работает на переднем плане. При этом выполняемые команды будут блокировать оболочку на период выполнения. Процесс может быть интерактивным. После выполнения процесса в терминале появится вывод. В данном разделе речь пойдёт об управлении процессами переднего плана.
Запуск процесса
По умолчанию процессы запускаются на переднем плане. Оболочка будет заблокирована до тех пор, пока команда не будет выполнена.
Некоторые команды переднего плана выполняются очень быстро и возвращают вас в командную строку оболочки почти мгновенно. Вот одна из таких команд:
Запуск команд Linux в фоновом режиме. Командная строка Linux
echo «Hello World»
Эта команда вернёт фразу Hello World в терминале, после чего вы снова сможете использовать командную строку.
Другие команды переднего плана могут занять больше времени. Это бывает потому, что команда выполняет расширенную операцию или настроена таким образом, что будет работать, пока её не остановят вручную.
Примером команды, которая может работать неопределенный срок, является top. После запуска эта команда будет обновлять экран, пока пользователь не прервёт процесс:
Чтобы остановить процесс, нужно нажать q. Некоторые процессы, однако, невозможно остановить таким образом, поскольку у них нет такой встроенной функции. Их придётся останавливать при помощи других методов.
Завершение процесса
Предположим, что вы запустили простой цикл bash в командной строке. Пусть этот цикл будет отображать фразу Hello World каждые десять секунд. Этот цикл будет продолжаться до тех пор, пока пользователь не завершит его.
while true; do echo «Hello World»; sleep 10; done
Циклы не имеют ключа quit, то есть их нельзя остановить, просто нажав q. Остановить этот процесс можно, только отправив ему сигнал. В системах Linux ядро может посылать процессам сигналы, чтобы завершить их или изменить их состояние. Обычно терминалы Linux посылают сигнал SIGINT (как правило, сигнал № 2) текущему процессу переднего плана при нажатии комбинации клавиш CTRL-C. Сигнал SIGINT говорит программе, что пользователь завершает процесс с помощью клавиатуры.
Итак, чтобы остановить запущенный ранее цикл, нужно нажать:
После этого цикл остановится.
Сигнал SIGINT, отправленный при помощи клавиш CTRL-C, – всего лишь один из множества доступных сигналов. Большинство сигналов нельзя отправить при помощи комбинаций клавиш, такие сигналы отправляются с помощью команды kill.
Приостановка процесса
Как было сказано ранее, процесс переднего плана будет блокировать доступ к оболочке в течение всего срока его исполнения. Но что делать, если после запуска процесса на переднем плане вам нужен доступ к терминалу?
Для этого существует сигнал SIGTSTP (обычно это сигнал №20). Его можно отправить при помощи комбинации клавиш CTRL-Z. При этом терминал регистрирует команду suspend, которая приостанавливает выполнение процесса и возвращает пользователя в интерактивную среду.
Для примера попробуйте запустить команду ping, которая будет подключаться к google.com каждые 5 секунд. Перед командой ping нужно ввести префикс command, который позволит обойти алиасы оболочки:
command ping -i 5 google.com
Чтобы приостановить запущенный процесс, нажмите:
На экране появится вывод:
[1]+ Stopped ping -i 5 google.com
Как видите, команда ping временно остановлена, а у вас снова появился доступ к командной строке оболочки. Используйте инструмент ps, чтобы убедиться в этом:
ps T
PID TTY STAT TIME COMMAND
26904 pts/3 Ss 0:00 /bin/bash
29633 pts/3 T 0:00 ping -i 5 google.com
29643 pts/3 R+ 0:00 ps t
Как видите, процесс ping всё ещё в списке текущих процессов, однако в столбце STAT находится T. Это значит, что данный процесс был приостановлен с помощью сигнала управления процессами.
Об изменении состояния процессов речь пойдёт далее. На данный момент нужно восстановить выполнение приостановленной команды:
Процесс будет восстановлен. Чтобы остановить его, используйте клавиши CTRL-C.
Управление фоновыми процессами
Также процессы можно запускать в фоновом режиме. Фоновый процесс связан с отдельным терминалом, но не блокирует доступа к оболочке, то есть пользователь может взаимодействовать с системой во время выполнения процесса.
Как вы уже видели, процессы переднего плана взаимодействует с терминалом таким образом, что в одном окне терминала может быть запущен только один процесс. Поскольку фоновые процессы немедленно возвращают пользователю доступ к оболочке (не дожидаясь завершения процесса), система может выполнять несколько фоновых процессов одновременно.
Запуск процесса
Чтобы запустить процесс в фоновом режиме, добавьте в конец команды символ амперсанда (
Вы увидите такой вывод системы управления задачами bash:
А также стандартный вывод команды ping:
PING google.com (74.125.226.71) 56(84) bytes of data.
64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=1 ttl=55 time=12.3 ms
64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=2 ttl=55 time=11.1 ms
64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=3 ttl=55 time=9.98 ms
Вывод фоновых процессов будет смешиваться со входными и выходными данными процессов переднего плана, но это не будет мешать исполнению приоритетных процессов.
Список фоновых процессов
Чтобы просмотреть список всех остановленных или переведённых в фоновый режим процессов, введите:
Если вы не остановили запущенную ранее команду ping, на экране появится такой результат:
[1]+ Running command ping -i 5 google.com для этого нужно поставить символ процента перед номером процесса, например:
Остановка фоновых процессов
Остановить текущий фоновый процесс можно несколькими способами. Проще всего использовать для этого команду kill, указав номер процесса. К примеру, чтобы остановить команду ping, нужно ввести:
В зависимости от настроек терминала, чтобы получить вывод, нужно либо подождать, либо нажать Enter. На экране появится:
[1]+ Terminated command ping -i 5 google.com
Чтобы убедиться, что процесс остановлен, запросите список фоновых процессов при помощи команды jobs.
Изменение состояния процесса
В данном разделе вы научитесь изменять состояние процесса. Мы уже затрагивали эту тему в данном руководстве, когда отправили команде сигнал CTRL-Z, чтобы приостановить её. Приостановленные процессы можно переводить из фонового режима на передний план и наоборот.
Перевод процесса в фоновый режим
Допустим, вы хотели запустить процесс в фоновом режиме, но забыли добавить в конец команды
По умолчанию команда bg восстанавливает последний остановленный процесс. Если же вы остановили несколько процессов, и вам нужно восстановить их в фоновом режиме, просто укажите порядковый номер процесса.
Обратите внимание: не все команды можно перевести в фоновый режим. Некоторые процессы при переходе будут автоматически прерываться
Перевод фонового процесса на передний план
Фоновые процессы можно переводить на передний план. Для этого нужно ввести:
По умолчанию эта команда восстанавливает последний процесс, переведённый в фоновый режим (он отмечен + в выводе команды jobs). Команда немедленно приостанавливает процесс и переводит его на передний план. Вы также можете задать номер процесса, который нужно перевести:
Переведя процесс на передний лан, вы можете остановить его при помощи CTRL-C, позволить ему завершиться, приостановить или снова вернуть в фоновый режим.
Сигнал SIGHUP
Независимо от того, где выполняется процесс (в фоновом режиме или на переднем плане), он довольно тесно связан с терминалом, в котором он был запущен. Когда терминал закрывается, он обычно посылает сигнал SIGHUP всем привязанным к нему процессам (фоновым, приоритетным, приостановленным). Этот сигнал остановит процессы, потому что их управляющий терминал будет в скором времени недоступен. Но что делать, если вы хотите закрыть терминал и при этом сохранить фоновые процессы?
Существует несколько способов сделать это. Как правило, для этого используются инструменты screen или tmux.
Однако это не всегда подходит.
Команда nohup
Если, запуская процесс, вы знаете, что в дальнейшем вам нужно будет закрыть терминал до завершения процесса, запустите его при помощи команды nohup. Эта команда позволяет запущенному процессу игнорировать сигнал SIGHUP. Даже если терминал будет закрыт, процесс продолжит работу в качестве дочернего процесса системы инициализации:
nohup ping -i 5 google.com https://www.8host.com/blog/upravlenie-prioritetnymi-i-fonovymi-processami-v-bash/» target=»_blank»]www.8host.com[/mask_link]
Запуск команд Linux в фоновом режиме (+Видео)
В данной заметке мы рассмотрим, как запускать команды Linux в фоновом режиме. То есть, когда после запуска какой-либо команды, она начинает свою работу в фоне, а вы продолжаете работать в терминале.
Оглавление
- Видео
- Что такое приоритетный и фоновый режимы
- Как запустить команду в фоновом режиме
- Пример запуска команды в фоновом режиме
- Как вывести задание из фонового режима
- Просмотр заданий, работающих в фоновом режиме
- Перевод задания в фоновый режим
- Заключение
Видео
Видео-версия. Наше видео про запуск команд в фоновом режиме.
Что такое приоритетный и фоновый режимы
Обычно все команды Linux запускаются в оболочке (в командной строке) в приоритетном режиме, называемом foreground. В этом режиме оболочка ожидает завершения работы команды, прежде чем пользователь сможет ввести новую команду.
Можно запускать команды Linux в фоновом режиме — background, при котором не нужно ожидать завершения команды, чтобы запустить другую команду.
Пользователь может запускать несколько команд в фоновом режиме одновременно. То есть эти команды будут выполняться параллельно. При этом окно терминала доступно для ввода новых команд.
Как запустить команду в фоновом режиме
Чтобы запустить команду в фоновом режиме, нужно в конец команды через пробел добавить знак амперсанда
Пример запуска команды в фоновом режиме
Рассмотрим пример. Предположим, нам нужно распаковать большой tar-архив. Выполняем команду:
$ tar -xf archive.tar [1] 8054 $ tar -xf archive2.tar [1] 8054 $ tar -xf archive2.tar [2]- Запущен tar -xf archive2.tar
Символом плюс + помечается последнее запущенное задание. Если использовать команду fg без аргументов, то она будет применена именно к этому заданию.
Символом минус — помечается задание, которое было запущено перед последним.
Перевод задания в фоновый режим
Чтобы перевести задание, которое в данный момент работает в приоритетном режиме, в фоновый режим, используется команда bg
Так как задание работает в приоритетном режиме, то вы не можете вводить команды, поэтому сначала нужно приостановить выполнение задания. Для этого используется сочетание клавиш Ctrl+Z
После этого можно выполнить команду bg , чтобы продолжить выполнение задания, но уже в фоновом режиме.
Заключение
Как запускать команды Bash в фоновом режиме в Linux
Нет ничего более раздражающего, чем запустить команду в своем терминале и заставить ее работать в течение минут, а иногда и часов, и не иметь возможности снова использовать свой терминал.
Конечно, вы можете использовать вкладки, но это неуклюжее решение, и оно не всегда оптимально, потому что вы можете видеть обновления во время работы.
Здесь мы покажем вам несколько различных способов запуска команд bash в фоновом режиме на Linux.
Концовка команды с в конце – это простой способ сделать это.
Таким образом, вы можете выполнить команду в фоновом режиме и продолжать использовать свой терминал.
Тем не менее, здесь есть одна загвоздка.
Использование оно просто отодвигает ее на задний план.
Это означает, что пока вы пытаетесь использовать терминал, все, что команда захочет передать в STDOUT или STDERR, все равно будет выведено, что может отвлекать.
COMMAND хороший вариант, если вам нужно забить на что-то ненадолго, но не ожидайте, что это будет продолжаться вечно.
отодвигает ее на задний план и поддерживает ее выполнение, пока открыто окно терминала.
Однако, если вы хотите, чтобы эта команда работала постоянно, даже после завершения сеанса терминала, вы можете использовать команду disown.
Чтобы использовать этот метод, начните с добавления .
COMMAND переводит эту команду в фоновый режим, но не отключает ее от пользователя.
Вы можете убедиться в этом, введя jobs в терминале.
Jobs покажет, какая команда работает в фоновом режиме, как мы видели раньше.
Просто введите disown, и она сделает именно это. (И вы можете еще раз проверить это с помощью команды jobs.)
Теперь вы можете закрыть свой терминал.
Система по-прежнему будет передавать данные в STDOUT или STDERR, но как только вы выйдете и снова откроете свой терминал, вы ничего там не увидите.
Вы можете снова найти команду с помощью команд top или ps и убить ее с помощью команды kill.
после команды переведет команду в фоновый режим, но в результате фоновая команда продолжит выводить сообщения в терминал по мере того, как вы ее используете.
Если вы хотите предотвратить это, подумайте о перенаправлении команды в /dev/null.
COMMAND /dev/null и /dev/null
В отличие от предыдущих команд, использование nohup позволяет запускать команду в фоновом режиме и поддерживать ее выполнение.
Как? nohup обходит сигнал HUP (сигнал зависания), что позволяет запускать команды в фоновом режиме, даже когда терминал выключен.
Объедините эту команду с перенаправлением в «/dev/null» (чтобы nohup не создавал файл nohup.out), и все перейдет в фон с помощью одной команды.
nohup COMMAND /dev/null #128423; Что такое порт 20 в TCP и UDP?
✔️ Как экспортировать каждый экземпляр LXD сразу
You may also like
Сравнение команд Printf и Echo на Linux
Что означает -z на Bash
Примеры команд size на Linux
Linux_Logo – вывод ASCII логотипа Linux с.
Параметры конфигурационного файла Apt /etc/apt/apt.conf
Разница между выключением, перезагрузкой и остановкой Linux
⌨️ Введение в команду “./configure”: Компиляция исходного кода.
Что такое /dev/zero на Linux?
Каковы лучшие дистрибутивы Linux в 2022 году
Работа с переменной PATH на Linux. Это.
Leave a Comment Cancel Reply
• Свежие записи
- В чем разница между IMAP и POP3
- ✔️ Как управлять контейнерами LXD от имени обычного пользователя
- Руководство для начинающих по созданию первого пакета Debian
- Феноменальная популярность электроники Xiaomi: основные причины
- Лаки Джет онлайн игра.
- Можно ли выучить английский самостоятельно?
- Техническая поддержка сайта на 1С-Битрикс: ключевые направления и нюансы
- Как переместить весь репозиторий Git
- GitLab CI: Как создавать образы Docker в Kubernetes
- Идеальные звуки: Всё, что нужно знать о лучших наушниках на рынке
• Категории
• Теги
• itsecforu.ru
• Страны посетителей
IT is good
Протоколы, используемые для получения электронной почты, являются важной частью функционирования Интернета, и все же они остаются практически незаметными для большинства пользователей. Два наиболее…
Управляем контейнерами LXD от обычного пользователя ( не root). Попробуйте использовать утилиту lxc как обычный пользователь. $ lxc list Error: Get «http://unix.socket/1.0»: dial…
Создание пакета Debian может показаться сложной задачей для новичков, но как только вы поймёте процесс, он станет вполне выполнимым. Давайте покажем вам создание…
Xiaomi, китайская технологическая компания, в последние годы штурмом захватила рынок электроники. В интернет-магазине pixel-centre.ru вас ждет огромный выбор товаров данного бренда. Одним из ключевых факторов…
Лаки Джет: новый хит среди онлайн-игр Что такое Лаки Джет? Многие наверняка слышали это название, и это неслучайно. Популярность проекта Lucky Jet набирает обороты в категории…
Источник: itisgood.ru