О web-разработке
и даже немного больше...

Как выполнять команды Linux в фоновом режиме?

Администрирование сервера под управлением Linux довольно часто сопровождается множественными манипуляциями команд в окне терминала. Это привычная картина для тех, кто администрирует сервера на Linux, и в некоторых случаях удобно выполнять команды в фоновом режиме. Это вполне может быть использовано на практике, и стоит отметить причины, почему это может быть полезным:
— Когда терминал переполняется кучей сообщений, да и выполнять параллельно дополнительные действия не представляется возможным;
— Если вы закрываете терминал, то останавливается текущий процесс, с его дочерними процессами;
Данные проблемы решаются элементарно, говоря простым языком нам необходимо полностью отделить выполняемый процесс от управляющего терминала.

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

Как запускать команды или процессы в фоновом режиме
Если ваш процесс запущен в окне терминала, то приостановить его можно с помощью команды Ctrl+Z, наверное, это многие знают, и подумают, и что с этого. И вот что интересное, приостановив, таким образом, процесс, мы можем продолжить его в фоновом режиме, для этого необходимо ввести команду

$ bg

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

$ jobs

Давайте просмотрим простой пример, как это можно применить. Предположим у нас есть tar-архив, который нам необходимо распаковать, однако нам некогда ждать, и мы хотим работать параллельно.

Распаковка архива в фоновом режиме

$ tar -czf home.tar.gz .

Жмем Cntr+Z, затем вводим команды

$ bg
$ jobs

Второй способ – это добавить символ & в конце команды, это сообщит системе, что нужно выполнять команду в фоновом режиме.

$ tar -czf home.tar.gz . &
$ jobs

Подобный способ позволяет выполнять процессы в фоновом режиме, тем не менее, STDIN, STDOUT, STDERR всё ещё связаны с терминалом. Теперь давайте добьемся того, чтобы процесс выполнялся даже при закрытии терминала.

Выполнение процесса после закрытия окна терминала
Чтобы процесс продолжил работать даже после закрытия окна терминала, мы можем использовать команду disown. Она «отцепит» процесс от оболочки окна терминала, после чего будет выполняться даже после закрытия окна консоли.
Давайте рассмотрим пример использования стандартной команды rsync, попробуем выполнить ее в фоновом режиме, и отцепим процесс от терминала.

$ sudo rsync Templates/* /var/www/html/ &
$ jobs
$ disown  -h  %1
$ jobs

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

$ nohup tar -czf iso.tar.gz Templates/* &
$ jobs

Как отделить процесс от управляющего терминала Linux
Чтобы полностью отделить процесс от управляющего терминала, можно так же использовать команду, которая будет эффективной при использовании пользовательского графического интерфейса (GUI), к примеру, браузер Firefox.

$ firefox </dev/null &>/dev/null &

В системе Linux (да и практически во всех Unix-системах) /dev/null представляет собой специальный файл устройства, которое так же называют «пустым устройством». Запись в него производиться успешно вне зависимости от объема записанной информации, чтение из него эквивалентно считыванию конца файла (EOF).

Опубликован: 22.10.2016 г.

См. также:

Поиск больших файлов в Linux
Bash: mail: command not found
Установка и настройка mSMTP на Linux
Ставим nginx последней версии на Linux
SFTP-обмен файлами между серверами
Время последнего перезапуска системы Linux
Как подсчитать размер файлов и папок в Linux?
12 полезных опций использования команды «df» в Linux

Комментарии

  1. вася пишет:

    Не всегда такое прокатывает. Допустим я хочу слушать музыку в фоне через mplayer. После приостановки ввожу bg - и появляется околесица: ничего не воспроизводится, а mplayer сыпет ошибками

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта