Linux фоновое выполнение команд

Запуск программ в фоновом режиме на Linux

При работе в ОС семейства Linux бывают случаи, когда необходимо запустить некий долгий процесс, например поиск файла, и при этом вернуться к работе в консоли. Вполне разумным решением будет открыть несколько терминалов и выполнить каждую задачу индивидуально, но что если мы не ищем легких путей? В этом случае разумным было бы запустить процесс в фоновом режиме. Рассмотрим как это сделать двумя способами.

Для начала следует разобрать синтаксис командной строки. Запуск одной программы/скрипта и т.д. выполняем явным указанием, например:

Для запуска одной программы по завершении другой используется логический оператор && (двойной амперсанд), например:

Не очень удачный пример, так как можно было использовать перенаправление “|”, приблизительно это выглядело бы так:

Все эти примеры замечательны для использования в скриптах, однако запуск “долгих” процессов сделает терминал недоступным, как это было отмечено выше. В этом случае поможет следующий пример:

Именно одинарный & в конце строки, указанный через пробел.

Запуск программ в фоновом режиме на Linux

Как видно, первая строка запускает процесс, но так как в системе мало txt-файлов, процесс завершается. Последующее нажатие Enter в терминале сообщает, что процесс успешно выполнен.

Рассмотрим другой вариант. Воспользуемся утилитой ping, результаты будем писать в файл.

Запуск программ в фоновом режиме на Linux

Ввиду отсутствия ограничительных параметров у данной команды, ее выполнение прервется когда закончится место на жестком диске.

Завершение процесса через killall покажет что процесс не завершился самостоятельно, а был “убит”.

Контролировать фоновые процессы, в данном случае, можно командой:

Выбор нового пароля

Сама команда jobs покажет сколько процессов выполняется и что именно выполняется, но различные ключи помогают отобразить больше информации. Ключ -l покажет еще и системный идентификатор процесса (PID). Ключ -p выведет только PID’ы, без описания.

Для перехода в приоритетный режим можно использовать команду fg 1 или %1.

Запуск программ в фоновом режиме на Linux

Воспользоваться утилитой-мультиплексором screen. В некоторых дистрибутивах требуется установка.

Источник

Как запускать команды Linux в фоновом режиме

Обычно, когда вы запускаете команду в терминале, вам нужно дождаться завершения команды, прежде чем вы сможете ввести другую. Это называется запуском команды в процессе переднего плана или переднего плана. Когда процесс выполняется на переднем плане, он занимает вашу оболочку, и вы можете взаимодействовать с ним, используя устройства ввода.

Что делать, если выполнение команды занимает много времени, а вы тем временем хотите выполнить другие команды? В вашем распоряжении несколько вариантов. Самый очевидный и простой вариант — запустить новый сеанс оболочки и запустить в нем команду. Другой вариант — запустить команду в фоновом режиме.

Читайте также:  Linux change npm version

Фоновый процесс — это процесс / команда, который запускается с терминала и выполняется в фоновом режиме без взаимодействия с пользователем.

В этой статье мы поговорим о фоновых процессах Linux. Мы покажем вам, как запустить команду в фоновом режиме и как сохранить выполнение процесса после закрытия сеанса оболочки.

Запуск команды Linux в фоновом режиме

Чтобы запустить команду в фоновом режиме, добавьте символ амперсанда ( & ) в конце команды:

Идентификатор задания оболочки (в скобках) и идентификатор процесса будут напечатаны на терминале:

Вы можете одновременно запускать несколько процессов в фоновом режиме.

Фоновый процесс продолжит писать сообщения в терминал, из которого вы вызвали команду. Чтобы подавить сообщения stdout и stderr используйте следующий синтаксис:

>/dev/null 2>&1 означает перенаправление stdout на /dev/null и stderr на stdout .

Используйте утилиту jobs для отображения состояния всех остановленных и фоновых заданий в текущем сеансе оболочки:

Вывод включает номер задания, идентификатор процесса, состояние задания и команду, запустившую задание:

[1]+ 25177 Running ping google.com & 

Чтобы вывести фоновый процесс на передний план, используйте команду fg :

Если у вас несколько фоновых заданий, укажите % и идентификатор задания после команды:

Чтобы завершить фоновый процесс, используйте команду kill за которой следует идентификатор процесса:

Переместить процесс переднего плана на задний план

Чтобы переместить запущенный процесс переднего плана в фоновый режим:

  1. Остановите процесс, нажав Ctrl+Z
  2. Переместите остановленный процесс на задний план, набрав bg .

Сохранение фоновых процессов после выхода из оболочки

Если ваше соединение разрывается или вы выходите из сеанса оболочки, фоновые процессы прекращаются. Есть несколько способов сохранить выполнение процесса после завершения сеанса интерактивной оболочки.

Один из способов — удалить задание из управления заданиями оболочки с помощью встроенной команды disown shell:

Если у вас несколько фоновых заданий, укажите % и идентификатор задания после команды:

Подтвердите, что задание удалено из таблицы активных заданий, используя команду jobs -l . Чтобы перечислить все запущенные процессы, включая отключенные, используйте команду ps aux .

Еще один способ сохранить выполнение процесса после выхода из оболочки — использовать nohup .

Команда nohup выполняет другую программу, указанную в качестве аргумента, и игнорирует все сигналы SIGHUP (зависание). SIGHUP — это сигнал, который отправляется процессу, когда его управляющий терминал закрыт.

Чтобы запустить команду в фоновом режиме с помощью команды nohup , введите:

Вывод команды перенаправляется в файл nohup.out .

nohup: ignoring input and appending output to 'nohup.out' 

Если вы выйдете из системы или закроете терминал, процесс не завершится.

Альтернативы

Существует ряд программ, позволяющих проводить несколько интерактивных сеансов одновременно.

Экран

Экран или GNU Screen — это программа-мультиплексор терминала, которая позволяет запускать сеанс экрана и открывать любое количество окон (виртуальных терминалов) внутри этого сеанса. Процессы, запущенные в Screen, будут продолжать работать, если их окно не отображается, даже если вы отключитесь.

Tmux

Tmux — это современная альтернатива GNU screen. С помощью Tmux вы также можете создать сеанс и открыть несколько окон внутри этого сеанса. Сеансы Tmux являются постоянными, что означает, что программы, запущенные в Tmux, продолжают работать, даже если вы закроете терминал.

Читайте также:  Управление дисковым пространством linux

Выводы

Чтобы запустить команду в фоновом режиме, включите & в конце команды.

Когда вы запускаете команду в фоновом режиме, вам не нужно ждать ее завершения, прежде чем вы сможете выполнить другую.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Запуск команд Linux в фоновом и приоритетном режимах

Если у вас в терминале запущено долгоиграющее приложение, не всегда целесообразно дожидаться его завершения. Зачем держать терминал занятым для одной определенной команды? В Linux вы можете отправить команду или процесс в фоновый режим, чтобы команда выполнялась, и при этом выполнять другие команды в терминале.

В этой статье мы рассмотрим пару способов отправить процесс в фоновом режиме и как вернуть фоновые процессы в приоритетные.

Запуск процесса Linux в фоновом режиме напрямую

Если вы знаете, что выполнение команды или процесса займет много времени, лучше запустить команду сразу в фоновом режиме.

Чтобы запустить команду Linux в фоновом режиме, нужно добавить амперсанд (&) в конце команды, например так:

Для примера возьмем простую команду sleep и отправим ее в фоновый режим:

После завершения выполнения команды в фоновом режиме, появится информация об этом в терминале:

Отправка работающего процесса Linux в фоновый режим

Можно отправить уже запущенный процесс в фоновый режим.

В этом случае используем сочетание клавиш Ctrl + Z, чтобы приостановить запущенный процесс, а затем использовать bg (сокращение от background), чтобы отправить процесс в фоновый режим. После этого приостановленный процесс будет работать в фоновом режиме.

[test@test-pc ~]$ sleep 60 ^Z [1]+ Остановлен sleep 60 [test@test-pc ~]$ bg [1]+ sleep 60 &

Просмотр всех процессов, работающих в фоновом режиме

Теперь, когда мы знаете, как отправлять процессы в фоновый режим, нам необходимо узнать, какие команды выполняются в фоновом режиме.

Для этого вводим нижеприведенную команду в терминал:

Эта команда выведет все запущенные в фоновом режиме задания/процессы/команды:

jobs [1] Запущен firefox & [2]- Запущен gedit & [3]+ Завершён vim

Выводим процесс из фонового режима

Итак, мы научились запускать команды в фоновом режиме. Но как насчет того, чтобы вывести процесс, работающий в фоновом режиме, снова в приоритет?

Чтобы отправить команду в фоновый режим, мы использовали bg. Чтобы вернуть фоновый процесс обратно, используем команду fg (foreground).

Если мы просто используем команду fg, он выведет последний процесс в очереди фоновых заданий в приоритет. В нашем предыдущем примере запуск fg вернет редактор Vim в терминал.

Если нужно вывести определенный процесс в приоритет, необходимо указать его идентификатор задания. Идентификатор задания — это число, которое мы видим в начале каждой строки в выходных данных команды jobs.

, где n — это идентификатор задания, отображаемый в выходных данных команды jobs.

Источник

Запуск команд Linux в фоновом режиме (+Видео)

Запуск команд Linux в фоновом режиме

В данной заметке мы рассмотрим, как запускать команды Linux в фоновом режиме. То есть, когда после запуска какой-либо команды, она начинает свою работу в фоне, а вы продолжаете работать в терминале.

Видео

Видео-версия. Наше видео про запуск команд в фоновом режиме.

Читайте также:  Red hat linux you are running

Что такое приоритетный и фоновый режимы

Обычно все команды Linux запускаются в оболочке (в командной строке) в приоритетном режиме, называемом foreground. В этом режиме оболочка ожидает завершения работы команды, прежде чем пользователь сможет ввести новую команду.

Можно запускать команды Linux в фоновом режимеbackground, при котором не нужно ожидать завершения команды, чтобы запустить другую команду.

Пользователь может запускать несколько команд в фоновом режиме одновременно. То есть эти команды будут выполняться параллельно. При этом окно терминала доступно для ввода новых команд.

Как запустить команду в фоновом режиме

Чтобы запустить команду в фоновом режиме, нужно в конец команды через пробел добавить знак амперсанда &

Синтаксис запуска команды в фоновом режиме можно записать следующим образом:

Пример запуска команды в фоновом режиме

Рассмотрим пример. Предположим, нам нужно распаковать большой tar-архив. Выполняем команду:

$ tar -xf archive.tar & [1] 7958 $ 

Распаковка архива выполняется в фоновом режиме, а мы можем вводить в терминале новые команды.

Запуск команды в фоновом режиме

Как вы можете видеть, на экран выводятся символы [1] 7958
[1] — это номер, который оболочка назначила нашему фоновому заданию, чтобы мы могли идентифицировать его и управлять им (см. ниже как).
7958 — это идентификатор (PID) процесса, который был создан.

Как вывести задание из фонового режима

Если вы запустили один или несколько процессов в фоновом режиме, то вы можете подключиться к любому из них и вывести из фонового режима (перевести в приоритетный режим). Для этого используется команда fg

Команда fg , запущенная без аргументов, выводит из фонового режима последний запущенный фоновый процесс.

Например, запустим две команды в фоновом режиме и выполним команду fg . В результате мы выведем вторую команду из фонового режима.

$ tar -xf archive1.tar & [1] 8054 $ tar -xf archive2.tar & [2] 8055 $ fg tar -xf archive2.tar

Перевод в приоритетный режим. Команда fg

Можно указать номер конкретного задания, которое нужно вывести из фонового режима:

$ tar -xf archive1.tar & [1] 8054 $ tar -xf archive2.tar & [2] 8055 $ fg 1 tar -xf archive1.tar

Просмотр заданий, работающих в фоновом режиме

Для просмотра заданий, работающих в фоновом режиме, используется команда jobs

$ jobs [1] Запущен tar -xf archive1.tar & [2]- Запущен tar -xf archive2.tar & [3]+ Запущен gedit &

Использование команды jobs

Символом плюс + помечается последнее запущенное задание. Если использовать команду fg без аргументов, то она будет применена именно к этому заданию.
Символом минус — помечается задание, которое было запущено перед последним.

Перевод задания в фоновый режим

Чтобы перевести задание, которое в данный момент работает в приоритетном режиме, в фоновый режим, используется команда bg

Так как задание работает в приоритетном режиме, то вы не можете вводить команды, поэтому сначала нужно приостановить выполнение задания. Для этого используется сочетание клавиш Ctrl+Z

После этого можно выполнить команду bg , чтобы продолжить выполнение задания, но уже в фоновом режиме.

Команда bg

Заключение

Мы кратко рассмотрели, как запускать команды Linux в фоновом режиме. Использование фонового режима позволяет запускать одновременно несколько процессов из одного окна терминала (экземпляра оболочки). Особенно это удобно, когда команда должна выполняться длительное время и не требует постоянного наблюдения. Пользователь при этом может продолжать пользоваться командной строкой.

Источник

Оцените статью
Adblock
detector