Как да изпълнявате Linux команди във фонов режим и да отделяте в терминала

Сподели

В това ръководство ще извадим наяве проста, но важна концепция за обработка на процеси в Linux система, която е как напълно да отделите процес от неговия управляващ терминал.

Когато Linux процес е свързан с терминал, може да възникнат два проблема:

  1. Вашият управляващ терминал е пълен с толкова много изходни данни и съобщения за грешка/диагностика.
  2. В случай, че терминалът бъде затворен, процесът заедно с неговите дъщерни процеси ще бъдат прекратени.

За да се справите с тези два проблема, трябва напълно да отделите процес от управляващ терминал. Преди да преминем към разрешаването на проблема, нека накратко да разгледаме как да изпълняваме процеси във фонов режим в Linux.

Изпълнете Linux команда или процес във фонов режим

Ако даден процес вече се изпълнява, като примера за команда tar по-долу, просто натиснете Ctrl+Z за да го спрете, след това въведете командата bg за да продължи с изпълнението му във фонов режим като работа.

Можете да видите всичките си фонови задачи, като напишете jobs. Въпреки това, неговата stdin, стандартен изходи stderr все още са присъединени към терминала.

$ tar -czf home.tar.gz .
$ bg
$ jobs
Изпълнете Linux команда във фонов режим
Изпълнете Linux команда във фонов режим

Можете също така да стартирате процес директно от фона, като използвате амперсанда, & знак.

$ tar -czf home.tar.gz . &
$ jobs
Стартирайте процеса на Linux във фонов режим
Стартирайте процеса на Linux във фонов режим

Разгледайте примера по-долу, въпреки че командата tar е стартирана като фонова работа, съобщение за грешка все още е изпратено до терминала, което означава, че процесът все още е свързан с управляващия терминал.

$ tar -czf home.tar.gz . &
$ jobs

tar: ./.config/etcher: Cannot open: Permission denied
Linux процес, работещ във фоново съобщение
Linux процес, работещ във фоново съобщение

Поддържайте Linux процесите да работят след затваряне на терминала

Ние ще използваме отричам се команда, която се използва, след като процесът е изпълнен и поставен на заден план, нейната работа е да премахне задание на обвивката от работните места в активния списък на обвивката, следователно няма да използвате fg, bg команди за тази конкретна работа вече.

Освен това, когато затворите контролния терминал, заданието няма да се закачи или да изпрати a РЕГИСТРАЦИЯ за всякакви детски работи.

Нека да разгледаме примера по-долу за използване на отрече се bash вградена функция.

$ sudo rsync Templates/* /var/www/html/files/ &
$ jobs
$ disown  -h  %1
$ jobs
Продължете процеса на Linux да работи след затваряне на терминала
Продължете процеса на Linux да работи след затваряне на терминала

Можете също да използвате nohup команда, която също позволява на процес да продължи да работи във фонов режим, когато потребител излезе от обвивка.

$ nohup tar -czf iso.tar.gz Templates/* &
$ jobs
Поставете процеса на Linux на заден план след затваряне на Shell
Поставете процеса на Linux на заден план след затваряне на Shell

Откачете Linux процеси в терминала

Следователно, за да отделите напълно процес от управляващ терминал, използвайте командния формат по-долу, това е по-ефективно за графичен потребителски интерфейс (GUI) приложения като Firefox:

$ firefox </dev/null &>/dev/null &

В Linux, /dev/null е специален файл на устройство, който отписва (отървава се от) всички данни, записани в него, в горната команда входът се чете от, а изходът се изпраща до /dev/null.

Като заключителна бележка, при условие че даден процес е свързан към управляващ терминал, като потребител ще видите няколко изходни реда на данните за процеса, както и съобщения за грешка на вашия терминал. Отново, когато затворите контролния терминал, вашият процес и дъщерните процеси ще бъдат прекратени.

Важно е, че за всякакви въпроси или забележки по темата се свържете с нас, като използвате формата за коментари по-долу.

Публикациите се превеждат автоматично с google translate

Loading


Сподели