- Как запускать команды Linux в фоновом режиме
- 1. Добавьте амперсанд после вашей команды
- 2. Используйте bg для отправки запущенных команд в фоновом режиме
- 3. Отправляйте команды в фоновом режиме с помощью nohup
- 4. Запускайте фоновые команды, используя системные перенаправления
- 5. Настройте выполнение команд Linux в фоновом режиме с помощью disown
- 6. Запускайте команды Linux в фоновом режиме с помощью tmux
- Оставьте свои команды Linux в фоновом режиме
- Как использовать рабочие пространства и активные углы в Linux Mint для повышения производительности
- Изменения Linux за эти годы
- 12 самых безопасных сайтов для загрузки свободного программного обеспечения Linux
- Команда nohup в Linux
- Синтаксис
- Ввод и вывод
- Использование команды nohup в Linux
- Проверка версии утилиты
- Запуск процесса
- Запуск процесса в фоновом режим
- Остановка запущенного процесса
- Выводы
- Команды Linux: как работает nohup
- Синтаксис команды nohup
- Проверка версии nohup
- Запуск процесса с помощью Nohup
- Запуск процесса в фоновом режиме
- Заключение
Как запускать команды Linux в фоновом режиме
Выполнение команды Linux занимает слишком много времени? Используйте любой из этих шести методов, чтобы отправить его в фоновый режим.
Команды Linux — отличный способ взаимодействия с системой с помощью терминала. Однако иногда для завершения текущей задачи может потребоваться некоторое время. Это заставляет пользователей либо ждать завершения процесса в течение значительного времени, либо вообще создавать новую оболочку.
К счастью, вы можете запускать команды Linux в фоновом режиме, следуя нескольким простым методам.
1. Добавьте амперсанд после вашей команды
Самый простой способ запустить фоновую команду Linux — добавить символ амперсанда ( & ) после команды. Например, если вы запустите текстовый редактор gedit со своего терминала, вы не сможете использовать оболочку, пока не закроете редактор. Однако, когда вы добавите дополнительный & к своей команде, вы сможете сразу же использовать оболочку.
2. Используйте bg для отправки запущенных команд в фоновом режиме
Иногда вы запускаете команду только для того, чтобы узнать, что для ее завершения требуется гораздо больше времени. Вы можете легко отправлять такие команды в фоновом режиме, нажимая клавиши Ctrl + Z , а затем используя команду bg . Нажатие Ctrl + Z останавливает запущенный процесс, и bg переводит его в фоновый режим.
Вы можете просмотреть список всех фоновых задач, введя jobs в терминале. Используйте команду fg , чтобы вернуться к текущей задаче.
3. Отправляйте команды в фоновом режиме с помощью nohup
Команда nohup в Linux позволяет администраторам запускать команды терминала, невосприимчивые к сигналам HUP или Hang Up . Вы можете легко запускать команды в фоновом режиме в Linux с помощью nohup.
В приведенном ниже примере выполняется простое сканирование портов Nmap в фоновом режиме.
Одним из ключевых преимуществ nohup является то, что ваши команды будут выполняться, даже если вы выйдете из командной оболочки. Кроме того, он генерирует файлы журналов выполнения. Найдите nohup.out в текущем каталоге или внутри $HOME .
4. Запускайте фоновые команды, используя системные перенаправления
Вы также можете запускать фоновые команды в Linux, используя системные перенаправления. Например, если вы запустите приведенную ниже команду ping , ваша оболочка выполнит ее в фоновом режиме и немедленно вернет вам управление терминалом.
Здесь вывод команды ping перенаправляется на output.log . Вы можете заменить его на /dev/null , если хотите отменить результат. 2> & 1 сообщает Bash перенаправлять любые ошибки в тот же файл. Последний & сигнализирует о запуске этой команды в фоновом режиме.
5. Настройте выполнение команд Linux в фоновом режиме с помощью disown
Команда disown упрощает запуск процессов в фоновом режиме. Во-первых, вам нужно отправить задачу в фоновый режим с помощью оператора & . Затем введите disown , чтобы отсоединить его от вашей оболочки.
Одним из основных преимуществ disown является то, что, как и nohup, система продолжит выполнение вашей задачи, когда вы закроете свою оболочку или выйдете из системы.
6. Запускайте команды Linux в фоновом режиме с помощью tmux
tmux — это мощный мультиплексор, который позволяет запускать несколько сеансов терминала в одном окне. Изучение того, как использовать и настраивать tmux в Linux, является отличным выбором для людей, которые не знакомы с ним. tmux упрощает выполнение фоновых команд в Linux.
Когда вы запустите приведенную выше команду tmux , она выполнит команду ping в отдельной оболочке и продолжит ее выполнение в фоновом режиме. Вы можете запустить любой процесс или команду Linux в фоновом режиме, используя этот метод.
Оставьте свои команды Linux в фоновом режиме
Возможность запускать команды в фоновом режиме делает управление системой более продуктивным для администраторов. Вы можете отправлять свои задачи в фоновый режим несколькими способами. Функции Bash, такие как символ & и Ctrl + Z , удобны, но система завершит фоновое задание при закрытии оболочки.
С другой стороны, такие инструменты, как nohup и disown , поддерживают выполнение вашей команды, даже когда вы выходите из системы или завершаете работу оболочки.
Если вы оставите свои программы в фоновом режиме на долгое время, они могут превратиться в процессы-зомби, если не будут правильно настроены. Эти процессы могут значительно замедлить работу системы. Поэтому обязательно время от времени выявляйте и уничтожайте процессы-зомби.
Смотрите другие статьи на нашем канале .
Как использовать рабочие пространства и активные углы в Linux Mint для повышения производительности
Изменения Linux за эти годы
12 самых безопасных сайтов для загрузки свободного программного обеспечения Linux
Вы также можете оставить свое мнение об этом посте в разделе комментариев.
Команда nohup в Linux
В Linux команда nohup (HangUP) поддерживает работу процессов даже после выхода из оболочки или терминала.
Команда предотвращает получение процессами или заданиями сигнала SIGHUP, который отправляется процессу при закрытии или выходе из терминала.
Синтаксис
Ввод и вывод
Если стандартный ввод является терминалом, то он берётся из нечитаемого файла.
Если стандартный вывод является терминалом, то вывод добавляется в nohup.out , при наличии возможности, в противном случае — сюда:
Если стандартный поток ошибок является терминалом, то он перенаправляется в стандартный вывод. Запись вывода в ФАЙЛ осуществляется так:
Использование команды nohup в Linux
Проверка версии утилиты
Для проверки версии утилиты используется следующий синтаксис:
oleg@mobile:~:$ nohup --v nohup (GNU coreutils) 9.1 Copyright (C) 2022 Free Software Foundation, Inc. Лицензия GPLv3+: GNU GPL версии 3 или новее. Это свободное ПО: вы можете изменять и распространять его. Нет НИКАКИХ ГАРАНТИЙ в пределах действующего законодательства. Автор программы — Jim Meyering. oleg@mobile:~:$
Запуск процесса
Для того чтобы процессы/задания выполнялись в оболочке и не были бы уничтожены при выходе из неё команда выполняется так:
oleg@mobile:~:$ nohup ~/Directory/convert.sh nohup: ввод игнорируется, вывод добавляется в 'nohup.out' oleg@mobile:~:$
В скрипт я внёс ошибку. Вывод команды был сохранен в nohup.out :
oleg@mobile:~:$ cat nohup.out mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$
Вывод можно также перенаправить в другой файл:
oleg@mobile:~:$ nohup ~/Directory/convert.sh > output.txt nohup: ввод игнорируется и поток ошибок перенаправляется на стандартный вывод oleg@mobile:~:$ cat output.txt mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$
Можно перенаправить в файл и стандартную ошибку и вывод с использованием атрибута 2>&1 :
oleg@mobile:~:$ nohup ~/Directory/convert.sh > output.txt 2>&1 oleg@mobile:~:$ cat output.txt nohup: ввод игнорируется mkdir: невозможно создать каталог «thumbnails»: Файл существует convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569. convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342. oleg@mobile:~:$
Запуск процесса в фоновом режим
Для запуска процесса в фоновом режиме в конце команды добавляется символ & . Для примера пингуем linuxcookbook.ru и отправляем его в фоновый режим:
oleg@mobile:~:$ nohup ping linuxcookbook.ru & [1] 122843 oleg@mobile:~:$ nohup: ввод игнорируется, вывод добавляется в 'nohup.out' oleg@mobile:~:$ cat nohup.out PING linuxcookbook.ru (139.162.132.20) 56(84) bytes of data. 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=1 ttl=52 time=43.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=2 ttl=52 time=41.2 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=3 ttl=52 time=37.3 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=4 ttl=52 time=40.2 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=5 ttl=52 time=36.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=6 ttl=52 time=39.1 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=7 ttl=52 time=39.5 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=8 ttl=52 time=38.7 ms 64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=9 ttl=52 time=41.1 ms . oleg@mobile:~:$
Для проверки работы процесса в фоне применяется команда pgrep с опцией -a :
oleg@mobile:~:$ pgrep -a ping 122843 ping linuxcookbook.ru oleg@mobile:~:$
Остановка запущенного процесса
Для остановки запущенного процесса используется команда kill , за которой следует идентификатор (ID) процесса:
oleg@mobile:~:$ kill 122843 oleg@mobile:~:$
Выводы
Из приведённых примеров использования в Linux команды nphup следует:
- все процессы, запущенные с помощью этой команды, будут игнорировать сигнал SIGHUP даже после выхода из оболочки;
- как только задание запущено или выполнено, стандартный ввод будет недоступен для пользователя;
- файл nohup.out используется по умолчанию для stdout и stderr .
Команды Linux: как работает nohup
При выходе из оболочки системы Linux все запущенные процессы обычно завершаются или зависают. Но что делать, если вы хотите, чтобы процессы работали даже при выходе из оболочки/терминала? В этом вам поможет команда nohup.
Nohup — это сокращение от no hangup. Эта команда поддерживает в системах Linux работу процессов даже после выхода из оболочки или терминала. Она предотвращает получение процессами или заданиями сигнала SIGHUP ( Signal Hang UP ). Это сигнал, который отправляется процессу при закрытии или выходе из терминала. В этом руководстве мы рассмотрим команду nohup и покажем, как ее можно использовать.
Синтаксис команды nohup
Синтаксис команды выглядит следующим образом:
Давайте же посмотрим, как работает данная команда.
Проверка версии nohup
Вы можете начать с проверки версии Nohup, используя приведенный ниже синтаксис.
Запуск процесса с помощью Nohup
Если вы хотите, чтобы ваши процессы/задания работали даже после закрытия терминала, укажите необходимую команду в nohup, как показано ниже. Задания будут по-прежнему выполняться и не будут уничтожены при выходе из оболочки или терминала.
Согласно приведенному выше выводу результат команды был сохранен в nohup.out. Чтобы убедиться в этом, запустите:
Кроме того, вы можете перенаправить вывод в другой файл, как показано ниже.
Чтобы просмотреть этот файл, введите:
Чтобы перенаправить в файл и стандартную ошибку, и вывод, используйте атрибут > filename 2>&1 , как показано ниже.
nohup ./hello.sh > myoutput.txt >2&1
Запуск процесса в фоновом режиме
Чтобы запустить процесс в фоновом режиме, используйте символ & в конце команды. В этом примере мы пингуем google.com и отправляем этот процесс в фоновый режим.
Чтобы проверить процесс при возобновлении работы оболочки, используйте команду pgrep, как показано ниже.
Если вы хотите остановить или убить запущенный процесс, используйте команду kill, за которой укажите идентификатор процесса, как показано ниже.
Заключение
Все процессы, запущенные с помощью команды nohup, будут игнорировать сигнал SIGHUP даже после выхода из оболочки.
Как только задание запущено с помощью команды nohup, стандартный ввод будет недоступен для пользователя.
По умолчанию nohup.out используется как стандартный файл для stdout и stderr.