Управление фоновыми процессами в Linux
При работе в консоли Linux любой процесс в обычном режиме запускается в "foreground", в интерактивном режиме на переднем плане. Им можно управлять через терминал. При этом делать что-то параллельно затруднительно. Необходимо открыть ещё один терминал.
Чтобы запустить команду в фоновом режиме (background), можно добавить в конец знак &:
# tar czvf sites.tar.gz /web/sites &
Команда будет запущена в фоне. Посмотреть список подобных задач можно с помощью команды jobs:
# jobs[1]+ Running tar czvf sites.tar.gz /web/sites &
Если вы запустили процесс в обычном режиме, но хотите его отправить в фон, то необходимо нажать в терминале сочетание клавиш CTRL+Z. Процесс будет остановлен. Проверить его состояние можно так же через jobs:
# ping 127.0.0.1^Z[1]+ Stopped ping 127.0.0.1# jobs[1]+ Stopped ping 127.0.0.1
Вернуть команду из остановленного состояния можно либо в фоновый режим с помощью bg (background), либо на передний план с помощью fg (foreground).
# bg %ping# fg %ping
Здесь в качестве идентификатора использовалось начало названия команды ping, но можно было указать идентификатор %1 для первой команды, %2 для второй и т.д.
Кстати, не советую ping отправлять в фон. Из него потом будет немного затруднительно выйти, так как эта команда даже из bg выводит информацию на консоль. С непривычки не понятно, как это остановить. Предлагаю самим попробовать и оценить результат.
Необходимо помнить, что команды в jobs привязаны к конкретному терминалу. Если открыть второй, то там не увидите задачи первого. Это не аналог запуска команд в screen или tmux. При разрыве связи по SSH или отключении от консоли, фоновые задачи тоже будут завершены. Их, кстати, можно посмотреть ещё вот так:
# ps T
Ключ T означает привязку к конкретной консоли.
Может показаться, что jobs, bg и fg это какой-то архаизм, но на практике, когда часто работаешь в консоли, периодически используешь. Особенно, когда что-то сжимаешь, распаковываешь, дампишь базу или скрипт какой-то запускаешь. Это быстрее и удобнее, чем открывать и перемещаться в другую консоль. Чтобы не мешал вывод, который будет из bg пробиваться в консоль, можно его перенаправить >/dev/null 2>&1.
#terminal #linux