It-e.RU
Цифровой двигатель вашего бизнеса.

Запуск программ в "фоне"

Запуск программ в "фоне"

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


Иногда требуется, чтобы команда продолжала выполняться, когда вы уже отключились от консоли, то есть в "фоне". Для этого существуют оконные менеджеры: tmux или screen. Но есть и другие способы:

Команда "nohup"

[max@jabber ~]# nohup sleep 12345 &
[1] 24758
[max@jabber ~]# nohup: ignoring input and appending output to `nohup.out'
[max@jabber ~]# exit
logout

Входим снова и смотрим на существование процесса через ps:

[max@jabber ~]# ps ax | grep sleep
24758 pts/3    S      0:00 sleep 12345
25066 pts/3    S+     0:00 grep --colour=auto sleep

Вернуться к команде можно через fg. Если команда давала какой-то вывод, то его можно посомтреть в файле nohup.out, который создается в текущей директории.

Команда "at"

В gentoo linux устанавливается sys-process/at

[max@jabber ~]# echo sleep 12345 | at now +5 minutes

И "sleep" выполнится через 5 минут. Подробнее "at" читайте в этой записе.

Практические применения данным приёмам могут быть самые разные. В случае с "at" можно классически обнулять фаирвол. Или устанавливать одноразовые задачи на какое-то время (одноразовый аналог крона).

Хочу отдельно упомянуть (раз уж чуть выше зашла речь) о командах fg и bg. Отличие bg от nohup - огромное. Самое основное - это то, что выполнение процесса через bg зависит от текущей сессии пользователя. Польза от этих команд также разная, но чаще всего удобно запустить процесс с амперсантом на конце (command &) или запустить и нажать ctrl+z, чтобы "свернуть" процесс, что-то посмотреть и снова "развернуть" при помощи fg. Но при "сворачивании" процесса через ctrl+z в фон, сам процесс перестает выполняться, то есть замараживается, а нужно чтобы он выполнялся. В этом случае "разморозьте" его в фоне командой bg. Вот небольшой пример:

jabber ~ # sleep 123456
^Z
[3]+  Stopped                 sleep 123456
jabber ~ # bg 3
[3]+ sleep 123456 &

Просмотреть список процессов в "фоне" можно при помощи команды "jobs".

Как это можно использовать? Например, вы вошли на сервер и увидели, что у вас скопились сообщения в очереди. Вы решаете обработать её и вызвали обработку очереди без вывода. "Свернули" процесс, "разморозили" в фоне. Теперь вы можете смотреть лог. Конечно, это никак не сравнится с окнными менеджерами tmux или screen, но иногда закинуьт процесс в фон очень удобно и ускоряет работу в консоли.

 


Пожалуйста, уважайте труд автора, при копировании материалов сохраняйте ссылку на источник!

Комментарии (0)







Разрешённые теги: <b><i><br>Добавить новый комментарий: