Запуск команд Linux в фоновом режиме |
Добавил(а) microsin |
Команда, запущенная в консоли, слишком долго выполняется? Не проблема, ведь можно просто запустить еще одно окно терминала. Кроме того, существует 6 методов запустить команду консоли в фоновом режиме (background) [1]. Команды Linux - хороший способ взаимодействия с операционной системой, используя терминал (x-terminal-emulator [2], putty, и т. п.). Однако иногда на выполнение поставленной задачи может уйти некоторое время. Это вынуждает пользователей либо ждать в течение некоторого времени, пока процесс завершится, либо вообще запустить новый шелл. К счастью, Linux позволяет запускать команды в фоне с помощью нескольких простых методов. [Метод 1. Добавление & после команды] Самый простой способ запустить команду в фоне - добавить в конец команды через пробел символ амперсанда (&). Например, вы можете захотеть запустить в терминале текстовый редактор gedit, и если просто выполнить команду gedit, то вы не сможете использовать эту командную строку шелла, пока не закроете окно редактора. Однако если добавить & к команде, то запустится gedit, и произойдет немедленный возврат в командную строку терминала. gedit & [Метод 2. Использование bg] Иногда команда выполняется только для того, чтобы выяснить, что требуется гораздо больше времени для её завершения. Такую команду проще всего отправить работать в фоновый режим путем нажатия клавиш Ctrl+Z, после чего можно использовать команду bg. Ctrl+Z остановит запущенный процесс, и командой bg его можно запустить в фоне. Список запущенных в фоне задач можно посмотреть командой jobs. Использует команду fg, чтобы переключиться обратно на запущенную задачу. [Метод 3. Использование nohup] Команда nohup в Linux позволяет админам запустить команды терминала, на которые не влияют сигналы HUP или Hang Up. Вы можете просто запустить команды в фоне, используя команду nohup. Пример ниже запускает в фоне простое сканирование портов утилитой Nmap. nohup sudo nmap -sS --top-ports=15 192.168.1.1/24 Одно из ключевых достоинств nohup в том, что ваши команды продолжат работу, даже когда вы завершите окно терминала. Кроме того, во время выполнения генерируются лог-файлы. Посмотрите файл nohup.out в текущей директории, или в директории $HOME. [Метод 4. System Redirect] Вы также можете запустить команды в фоне, используя систему перенаправлений Linux (system redirect). Например, если вы запустите команду ping, как в примере ниже, то ваш шелл запустит её в фоне и немедленно возвратит вам контроль над командной строкой терминала. ping -c5 8.8.8.8 >output.log 2>&1 & Ниже показан вывод команды ping, перенаправленный в файл output.log. Вы можете заменить этот файл на /dev/null, если хотите отбросить результат. Порция 2>&1 команды говорит Bash перенаправить любые ошибки в тот же самый файл. Завершающий символ & сигнализирует Bash запустить команду в фоне. [Метод 5. Использование disown] Команда disown упрощает запуск процессов в фоне. Сначала нужно отправить команду на фоновое выполнение, используя &. Затем выполните disown для отсоединения этой команды от текущего шелла. gedit & disown Основное достоинство disown в том, что как и для nohup, система не прибьет вашу задачу, когда вы закроете её родительский шелл или разлогиньтесь. [Метод 6. Использование tmux] Комада tmux это мощный переключатель, который позволяет запустить несколько сессий терминала в одном окне. tmux new -d 'ping -c 10 8.8.8.8 > output.log' Когда вы запустите этот пример, команда ping выполнится в отдельном шелле и останется работать в фоновом режиме. С помощью этого метода вы можете запустить в фоне любой процесс Linux или команду. [Команды, работающие в фоне] Если вы надолго оставите свои программы в фоновом режиме, они могут стать зомби-процессами, если не будут правильно закодированы. Эти процессы могут значительно замедлить работу системы. Поэтому не забудьте время от времени идентифицировать и убить зомби-процессы. [Ссылки] 1. How to Run Linux Commands in the Background site:makeuseof.com. |