При работе в консоле Linux вы запускаете одну команду за другой. Например, вы редактируете файл конфигурации с помощью редакторов nano или vim или загружаете файлы с помощью команды wget и вдруг захотели просмотреть какие-то другие файлы или вам нужно выполнить другую команду.
При таком развитии событий, у вас есть несколько вариантов. Первый, вы можете переключиться в другую консоль. Второй закрыть файл конфигурации или отмените копирование файлов. Если с редактированием файла еще все понятно. После закрытия его можно продолжить редактировать, если сохранили изменения. Но вот, если вы находитесь в середине процесса скачивания файла из сети, это может стоить вам времен.
Есть еще третий вариант, перевести процесс в фоновый режим или, другими словами, приостановить его на некоторое время и возобновить позже. Вот об этом варианте мы сегодня поговорим.
Приостановить процесс в Linux.
Для того, чтобы приостановить процесс в Linux , вы можете использовать сочетание клавиш CTRL+Z. Это работает на всех дистрибутивах Linux, которые я встречал.
Теперь вы можете продолжить выполнение другой важной задачи, а как только закончите, вернуться к выполнению первоначальной с помощью команды fg.
Например, Вы редактируете текстовый файл с помощью Nano и вдруг хотите приостановить его в середине редактирования.
Используйте сочетание клавиш CTRL+Z, чтобы приостановить редактирование
Команда «fg» вернет вас в экран редактирования редактора и вы сможете продолжить с того места, где вы остановились.
Перевести в фоновый режим можно сколько угодно процессов, конечно в зависимости от размера вашей оперативной памяти. И в любой момент, когда это станет необходимо, вы сможете найти их с помощью команды ps или jobs и возобновить работу.
Просмотр списка приостановленных процессов.
Чтобы просмотреть все приостановленные процессы в фоновом режиме, вы можете использовать две разные команды: ps и jobs.
В чем разница между командами ps и jobs?
Команда ps отображает список всех запущенных процессов в вашей системе. А команда jobs отображает только приостановленные процессы с помощью сочетания клавиш CTRL + Z в вашей системе.
Давайте найдем все приостановленные процессы с помощью команды ps:
$ ps
PID TTY TIME CMD
2491 pts/0 00:00:00 bash
3081 pts/0 00:00:00 nano
4340 pts/0 00:00:00 ping
4355 pts/0 00:00:00 top
4364 pts/0 00:00:00 ps
Если изучить вывод, то можно обнаружить еще два процесса, работающих в фоновом режиме, которые указаны в списке. Процесс bash относится к текущей запущенной оболочке bash в вашем терминале, а процесс ps используется для вывода списка всех этих процессов.
Вот в том и проблема, что не совсем понятно, какой процесс остановлен, а какой работает. Поэтому команда ps не особо информативна в этом случае.
Теперь давайте воспользуемся командой jobs, чтобы получить список всех приостановленных процессов в фоновом режиме.
$ jobs
[1] Stopped nano test
[2]- Stopped ping roadit.ru
[3]+ Stopped top
В этом случае вы можете точно определить только приостановленные процессы.
Возобновление процесса
Вы можете возобновить приостановленный процесс с помощью команды fg.
Если вы выполните команду fg без идентификатора процесса, она возобновит последний процесс, который вы отправили в фон.
Например, если у вас есть два или три разных процесса в фоновом режиме, одна команда fg возобновляет недавно приостановленный процесс в фоновом режиме с символом (+).
$ fg
В моем случае top имеет символ (+). Таким образом, это будет первый процесс, который возобновится с помощью команды fg.
Вы можете возобновить любой конкретный процесс вместо недавно приостановленного. В этом случае вам необходимо указать идентификатор процесса этого конкретного процесса вместе с командой fg, чтобы возобновить его работу
$ fg <идентификатор процесса>
В моем случае я заменю идентификатор процесса на 2, чтобы возобновить команду ping.
Будет ли это работать после перезагрузки системы?
Нет. Все процессы при перезагрузке завершаются, в том числе и приостановленные. А вот при переводе системы в спящий режим, возобновить процессы можно.
Продолжить работу приостановленного процесса в фоне.
Команда bg полезна, если вы хотите продолжать работу процесса в фоновом режиме без его остановки.
В чем разница между bg и fg?
Команда fg переключает недавно приостановленный процесс из фонового режима в приоритетный, а команда bg сохраняет работу процесса в фоновом режиме.
Например, запустим sleep 500 и нажмем ctrl+Z
Как можно видеть, статус процесса stopped. Это означает, что работа процесса остановлена, то есть он ничего не делает. И если вы вернете его работу, то она продолжится с того места, где он был приостановлен.
Теперь запустим работу этого процесса в фоне с помощью команды bg
Как можно видеть, статус процесса поменялся на Running, это означает, что процесс продолжает выполняться в фоновом режиме.
Если у вас имеется много запущенных процессов, то для того, чтобы запустить необходимый указывается его идентификатор после символа %.
Завершить приостановленный процесс.
Если вам больше не требуется приостановленный процесс, вы можете остановить его напрямую, используя PID в фоновом режиме, с помощью команды kill.
Я настоятельно рекомендуем открывать каждый процесс один за другим и завершать его собственным методом, чтобы аккуратно закрыть его.
Для этого сначала необходимо узнать PID приостановленного процесса с помощью команды ps. Затем укажите этот PID с помощью команды kill, чтобы остановить этот процесс.
$ ps
$ kill -9 <PID>
Замените PID на PID процесса, который вы хотите завершить или остановить. В моем случае я хочу остановить фоновый процесс приложения top:
Вместо конкретного процесса вы можете использовать приведенную ниже команду для того, чтобы уничтожить все приостановленные процессы одновременно.
$ kill -9 $(jobs -p)
Заключение.
Приостановка процессов и запуск их в фоновом режиме, полезный прием. Например, когда происходит загрузка больших файлов с помощью команды wget, загрузка проектов с помощью git clone или распаковка сжатых файлов. Так что, знание того, как это делается будет полезным.
Was this helpful?
0 / 0