Linux: jobs, fg, bg – управление фоновыми процессами

Автор: | 18/08/2013

linux_logoЗапущенный процесс в обычном режиме работает в режиме “foreground“, т.е. – “на переднем плане” или, другими словами, “в приоритетном режиме”. В таком режиме он принимает команды с управляющего терминала, в котором он запущен, и на него же выводит информацию stdout и stderr. Кроме того, он делает недоступным командную строку.

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

# tar cpf usr.lib.tar usr/lib 2>/dev/null &

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

# jobs
[6]-  Stopped                 watch ls  (wd: /home/setevoy)
[7]+  Stopped                 top

Либо – запустить её в обычном режиме, после чего нажать комбинацию ctrl+Z, отправив ей сигнал TSTR. Подробнее о сигналах – в статье Linux&FreeBSD: команды kill, nohup — сигналы и управление процессами. После этого – она появится в списке jobs с новым номером:

# tar cpf usr.lib.tar usr/lib 2>/dev/null
^Z
[8]+  Stopped                 tar cpf usr.lib.tar usr/lib 2> /dev/null

Теперь, что бы продолжить её выполнение в фоновом режиме – введите команду bg (background):

# bg
[8]+ tar cpf usr.lib.tar usr/lib 2> /dev/null &

Кроме обычных PID, у задач в фоне имеется собственный номер, который всегда начинается с единицы (если нет других фоновых задач). Кроме того, jobs отображает состояние процесса – Running, Stopped, Done, Exit.

Например, по окончании архивирования – статус задачи станет Done:

# jobs
[6]-  Stopped                 watch ls  (wd: /home/setevoy)
[7]+  Stopped                 top
[8]   Done                    tar cpf usr.lib.tar usr/lib 2> /dev/null

Если команду jobs запустить из каталога отличного от того, в котором была запущена сама задача – jobs укажет её wdworking directory. так же, необходимо учитывать, что для каждого управляющего терминала номера задач в jobs будут независимы и начинаться с единицы.

Что бы вывести задачу из фонового режима – используется команда fg (foreground), которой можно либо передать номер задачи в качестве аргумента, либо – запустить без аргументов. В последнем случае – будет выведена задача, отмеченная знаком + в списке jobs, т.е. – последняя отправленная “в фон” задача.

Например, команда:

# fg 7

Вернёт на экран утилиту top и переведёт её в режим Running.