В това ръководство ще извадим наяве проста, но важна концепция за обработка на процеси в Linux система, която е как напълно да отделите процес от неговия управляващ терминал.
Когато Linux процес е свързан с терминал, може да възникнат два проблема:
- Вашият управляващ терминал е пълен с толкова много изходни данни и съобщения за грешка/диагностика.
- В случай, че терминалът бъде затворен, процесът заедно с неговите дъщерни процеси ще бъдат прекратени.
За да се справите с тези два проблема, трябва напълно да отделите процес от управляващ терминал. Преди да преминем към разрешаването на проблема, нека накратко да разгледаме как да изпълняваме процеси във фонов режим в Linux.
Съдържание
Изпълнете Linux команда или процес във фонов режим
Ако даден процес вече се изпълнява, като примера за команда tar по-долу, просто натиснете Ctrl+Z
за да го спрете, след това въведете командата bg
за да продължи с изпълнението му във фонов режим като работа.
Можете да видите всичките си фонови задачи, като напишете jobs
. Въпреки това, неговата stdin, стандартен изходи stderr все още са присъединени към терминала.
$ tar -czf home.tar.gz . $ bg $ jobs

Можете също така да стартирате процес директно от фона, като използвате амперсанда, &
знак.
$ tar -czf home.tar.gz . & $ jobs

Разгледайте примера по-долу, въпреки че командата tar е стартирана като фонова работа, съобщение за грешка все още е изпратено до терминала, което означава, че процесът все още е свързан с управляващия терминал.
$ tar -czf home.tar.gz . & $ jobs tar: ./.config/etcher: Cannot open: Permission denied

Поддържайте Linux процесите да работят след затваряне на терминала
Ние ще използваме отричам се команда, която се използва, след като процесът е изпълнен и поставен на заден план, нейната работа е да премахне задание на обвивката от работните места в активния списък на обвивката, следователно няма да използвате fg
, bg
команди за тази конкретна работа вече.
Освен това, когато затворите контролния терминал, заданието няма да се закачи или да изпрати a РЕГИСТРАЦИЯ за всякакви детски работи.
Нека да разгледаме примера по-долу за използване на отрече се bash вградена функция.
$ sudo rsync Templates/* /var/www/html/files/ & $ jobs $ disown -h %1 $ jobs

Можете също да използвате nohup
команда, която също позволява на процес да продължи да работи във фонов режим, когато потребител излезе от обвивка.
$ nohup tar -czf iso.tar.gz Templates/* & $ jobs

Откачете Linux процеси в терминала
Следователно, за да отделите напълно процес от управляващ терминал, използвайте командния формат по-долу, това е по-ефективно за графичен потребителски интерфейс (GUI) приложения като Firefox:
$ firefox </dev/null &>/dev/null &
В Linux, /dev/null е специален файл на устройство, който отписва (отървава се от) всички данни, записани в него, в горната команда входът се чете от, а изходът се изпраща до /dev/null.
Като заключителна бележка, при условие че даден процес е свързан към управляващ терминал, като потребител ще видите няколко изходни реда на данните за процеса, както и съобщения за грешка на вашия терминал. Отново, когато затворите контролния терминал, вашият процес и дъщерните процеси ще бъдат прекратени.
Важно е, че за всякакви въпроси или забележки по темата се свържете с нас, като използвате формата за коментари по-долу.
Публикациите се превеждат автоматично с google translate