Как да стартирате и контролирате фонови процеси в Linux

Shell среда на компютър с Linux.

Фатмавати Ахмад Заенури/Shutterstock.com



Използвайте обвивката на Bash в Linux, за да управлявате процеси на преден и заден план. Можете да използвате функциите и сигналите за контрол на заданията на Bash, за да ви даде повече гъвкавост в начина, по който изпълнявате команди. Ние ви показваме как.

Всичко за процесите

Всеки път, когато дадена програма се изпълнява в операционна система, подобна на Linux или Unix, се стартира процес. Процесът е името на вътрешното представяне на изпълняващата се програма в паметта на компютъра. За всяка активна програма има процес. Всъщност има процес за почти всичко, което се изпълнява на вашия компютър. Това включва компонентите на вашия графична среда на работния плот (GDE) като напр GNOME или КЪДЕТО , и система демони които се стартират при стартиране.





Защо почти всичко, което работи? Е, вградени в Bash като напр CD , Pwd , и псевдоним не е необходимо процесът да бъде стартиран (или създаден), когато се изпълняват. Bash изпълнява тези команди в рамките на екземпляра на обвивката на Bash, която се изпълнява във вашия терминален прозорец. Тези команди са бързи именно защото не е необходимо да имат стартиран процес, за да ги изпълнят. (Можете да напишете |_+_| в прозорец на терминала, за да видите списъка с вградени Bash.)

Процесите могат да се изпълняват на преден план, като в този случай те поемат вашия терминал, докато не завършат, или могат да се изпълняват на заден план. Процесите, които се изпълняват във фонов режим, не доминират в прозореца на терминала и можете да продължите да работите в него. Или поне те не доминират в прозореца на терминала, ако не генерират изход на екрана.



Разхвърлян пример

Ще започнем просто |_+_| трасиране . Отиваме на |_+_| домейнът How-To Geek. Това ще се изпълни като процес на преден план.

help

Реклама

Получаваме очакваните резултати, превъртайки надолу прозореца на терминала. Не можем да направим нищо друго в прозореца на терминала, докато |_+_| бяга. За да прекратите командата, натиснете |_+_|.



ping

Видимият ефект на |_+_| е подчертано на екранната снимка. |_+_| дава кратко резюме и след това спира.

Нека повторим това. Но този път ще ударим |_+_| вместо |_+_|. Задачата няма да бъде прекратена. Това ще се превърне във фонова задача. Получаваме контрола върху прозореца на терминала, върнат ни.

ping ping

Видимият ефект от удрянето |_+_| е подчертано на екранната снимка.

Този път ни казват, че процесът е спрян. Спрян не означава прекратен. Това е като кола на знак за спиране. Не сме го бракували и изхвърлили. Все още е на пътя, неподвижно, чака да си тръгне. Процесът вече е фон работа .

|_+_| команда ще изброи работните места които са стартирани в текущата терминална сесия. И тъй като работните места са (неизбежно) процеси, можем да използваме и |_+_| заповядайте да ги видите. Нека използваме и двете команди и да сравним техните резултати. Ще използваме |_+_| опция (терминал) опция за изброяване само на процесите, които се изпълняват в този терминален прозорец. Имайте предвид, че не е необходимо да използвате тире |_+_| с |_+_| опция.

Ctrl+C Ctrl+C

|_+_| команда ни казва:

    [един]: Числото в квадратни скоби е номерът на заданието. Можем да използваме това, за да се позоваваме на заданието, когато трябва да го контролираме с команди за управление на заданието. +: Знакът плюс |_+_| показва, че това е заданието, върху което ще се действа, ако използваме команда за управление на заданието без конкретен номер на заданието. Нарича се задание по подразбиране. Заданието по подразбиране винаги е последното добавено към списъка със задачи. Спряна: Процесът не се изпълнява. пинг www.howtogeek.com: Командният ред, който стартира процеса.

|_+_| команда ни казва:

    PID: Идентификаторът на процеса на процеса. Всеки процес има уникален идентификатор. TTY: Псевдо-телетип (прозорец на терминала), от който е изпълнен процесът. ДЪРЖАВА: Състоянието на процеса. ВРЕМЕ: Количеството процесорно време, изразходвано от процеса. КОМАНД: Командата, която стартира процеса.

Това са общи стойности за колоната STAT:

    д: Непрекъсваем сън. Процесът е в състояние на изчакване, обикновено чака за вход или изход и не може да бъде прекъснат. аз: Празен. Р: Бягане. С: Прекъсваем сън. т: Спрян от сигнал за управление на заданието. С: Процес на зомбита. Процесът е прекратен, но не е почистен от неговия родителски процес.
Реклама

Стойността в колоната STAT може да бъде последвана от един от тези допълнителни индикатори:

    <: Задача с висок приоритет (не е подходяща за други процеси). н: Нисък приоритет (приятно за други процеси). Л: процесът има страници, заключени в паметта (обикновено се използва от процеси в реално време). с: Водещ на сесията. Лидерът на сесията е процес, който е стартирал групи процеси. Обвивката е лидер на сесията. Л: Многонишков процес. +: Процес на преден план.

Можем да видим, че Bash има състояние |_+_|. Главното S ни казва, че обвивката на Bash спи и е прекъсваема. Веднага щом имаме нужда от него, той ще отговори. Малките букви s ни казват, че обвивката е лидер на сесията.

Командата ping има състояние |_+_|. Това ни казва, че |_+_| е спрян от сигнал за управление на заданието. В този пример това беше |_+_| ние го поставяхме на заден план.

|_+_| командата има състояние |_+_|, което означава изпълняване. |_+_| показва, че този процес е член на групата на преден план. Така че |_+_| командата се изпълнява на преден план.

Командата bg

|_+_| командата се използва за възобновяване на фонов процес. Може да се използва със или без номер на работа. Ако го използвате без номер на задание, заданието по подразбиране се извежда на преден план. Процесът все още работи във фонов режим. Не можете да изпратите никакви данни към него.

Ако издадем |_+_| команда, ще възобновим нашата |_+_| команда:

ping

Реклама

|_+_| командата се възобновява и отново виждаме превъртащия се изход в прозореца на терминала. Показва се името на командата, която е била рестартирана. Това е подчертано на екранната снимка.

възобновява фонов процес на пинг с извеждане в терминална вдовица

Но имаме проблем. Задачата се изпълнява във фонов режим и не приема въвеждане. И така, как да го спрем? |_+_| не прави нищо. Можем да го видим, когато го въвеждаме, но фоновата задача не получава тези натискания на клавиши, така че продължава да пингува весело.

Всъщност сега сме в странен режим на смесване. Можем да въвеждаме в прозореца на терминала, но това, което въвеждаме, бързо се помита от превъртащия изход от |_+_| команда. Всичко, което въвеждаме, влиза в сила на преден план.

За да спрем нашата фонова задача, трябва да я изведем на преден план и след това да я спрем.

Командата fg

|_+_| команда ще изведе фонова задача на преден план. Точно като |_+_| команда, може да се използва със или без номер на задание. Използването му с номер на работа означава, че ще работи на конкретна работа. Ако се използва без номер на задание, се използва последната команда, изпратена на заден план.

Ако напишем |_+_| нашите |_+_| командата ще бъде изведена на преден план. Знаците, които въвеждаме, се смесват с изхода от |_+_| команда, но те се управляват от обвивката, сякаш са били въведени в командния ред, както обикновено. И всъщност, от гледна точка на Bash shell, точно това се е случило.

Ctrl+Z

Реклама

И сега, когато имаме |_+_| команда, която се изпълнява отново на преден план, можем да използваме |_+_| да го убиеш.

Ctrl+C

Трябва да изпращаме правилните сигнали

Това не беше точно красиво. Очевидно стартирането на процес във фонов режим работи най-добре, когато процесът не произвежда изход и не изисква въвеждане.

Но, разхвърлян или не, нашият пример постигна:

  • Поставяне на процес във фонов режим.
  • Възстановяване на процеса до работещо състояние във фонов режим.
  • Връщане на процеса на преден план.
  • Прекратяване на процеса.

Когато използвате |_+_| и |_+_| , изпращате сигнали към процеса. Това са стенографски начини на използване на |_+_| команда. Има 64 различни сигнала че |_+_| Може да се изпрати. Използвайте |_+_| в командния ред, за да ги изброите. |_+_| не е единственият източник на тези сигнали. Някои от тях се повдигат автоматично от други процеси в системата

Ето някои от често използваните.

    SIGHUP: Сигнал 1. Автоматично се изпраща към процес, когато терминалът, в който работи, е затворен. SIGINT: Сигнал 2. Изпратен към процес, който сте натиснали |_+_|. Процесът се прекъсва и се казва да бъде прекратено. ТОЛКОВА МНОГО: Сигнал 3. Изпраща се към процес, ако потребителят изпрати сигнал за излизане |_+_|. SIGKILL: Сигнал 9. Процесът незабавно се прекратява и няма да се опита да се затвори чисто. Процесът не се спуска грациозно. SIGTERM: Сигнал 15. Това е сигналът по подразбиране, изпратен от |_+_|. Това е стандартният сигнал за прекратяване на програмата. SIGTSTP: Сигнал 20. Изпраща се към процес, когато използвате |_+_|. Той спира процеса и го поставя на заден план.

Трябва да използваме |_+_| команда за издаване на сигнали, които нямат присвоени комбинации от клавиши.

Допълнителен контрол на работата

Процес, преместен във фонов режим с помощта на |_+_| се поставя в спряно състояние. Трябва да използваме |_+_| команда, за да стартирате отново. Стартирането на програма като работещ фонов процес е лесно. Добавете амперсанд |_+_| до края на командния ред.

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

Реклама

докато е вярно; echo How-To Geek Loop Process; сън 3; Свършен &

Казват ни номера на заданието и идентификационния номер на процеса на процеса. Номерът на нашата работа е 1, а идентификаторът на процеса е 1979. Можем да използваме тези идентификатори, за да контролираме процеса.

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

ls

изход на процеса на фонов цикъл, разпръснат с изход от други команди

За да спрем нашия процес, можем да използваме |_+_| за да си напомним какъв е номерът на заданието и след това използвайте |_+_|.

|_+_| съобщава, че нашият процес е задача номер 1. За да използваме този номер с |_+_| трябва да го предхождаме със знак за процент |_+_|.

Ctrl+Z jobs

СВЪРЗАНИ: Как работят сигналите на Linux: SIGINT, SIGTERM и SIGKILL

|_+_| изпраща |_+_| сигнал, сигнал номер 15, към процеса и той се прекратява. При следващото натискане на клавиша Enter се показва състоянието на заданието. Той посочва процеса като прекратен. Ако процесът не отговаря на |_+_| команда можете да я повишите. Използвайте |_+_| с |_+_| , сигнал номер 9. Просто поставете числото 9 между |_+_| командвайте номера на заданието.

ps

Неща, които сме обхванали

    Ctrl+C: Изпраща |_+_|, сигнал 2, на процеса—ако приема вход—и му казва да прекрати. Ctrl+D: Изпраща |_+_|, сигнал 3, на процеса—ако приема вход—и му казва да излезе. Ctrl+Z: Изпраща |_+_|, сигнал 20, към процеса и му казва да спре (прекъсне) и да стане фонов процес. работни места: Изброява фоновите задания и показва номера им. bg работа_номер : Рестартира фонов процес. Ако не предоставите номер на заданието, се използва последният процес, който е превърнат във фонова задача. fg работа_номер : извежда фонов процес на преден план и го рестартира. Ако не предоставите номер на заданието, се използва последният процес, който е превърнат във фонова задача.
  • командна линия & : Добавяне на амперсанд |_+_| до края на командния ред изпълнява тази команда като фонова задача, която се изпълнява.
  • убий % работа_номер : Изпраща |_+_|, сигнал 15, към процеса, за да го прекрати. убийте 9 % работа_номер : Изпраща |_+_|, сигнал 9, към процеса и го прекратява внезапно.

СВЪРЗАНИ: Как да убивате процеси от терминала на Linux

Linux команди
Файлове катран · pv · котка · tac · chmod · сцепление · разл · sed · С · човек · pushd · popd · fsck · тестов диск · сек · fd · пандока · CD · $PATH · awk · присъединяване · jq · сгънете · уникален · journalctl · опашка · състояние · ls · fstab · изхвърли · по-малко · chgrp · chown · rev · виж · струни · Тип · преименувайте · цип · разархивирайте · монтиране · umount · Инсталирай · fdisk · mkfs · rm · rmdir · rsync · df · gpg · ние · нано · mkdir · от · вътрешен · кръпка · преобразувам · rclone · накъсайте · SRM
процеси псевдоним · екран · връх · хубаво · renice · напредък · strace · система · tmux · chsh · история · в · партида · Безплатно · който · dmesg · потребителски мод · п.с · chroot · xargs · tty · мизичко · lsof · vmstat · изчакване · стена · да · убиват · сън · sudo · неговата · време · groupadd · потребителски мод · групи · lshw · изключвам · рестартирайте · Спри се · изключване · passwd · lscpu · crontab · дата · bg · fg
Работа в мрежа netstat · пинг · трасиране · ip · ss · кой е · fail2ban · bmon · Вие · пръст на ръката · nmap · ftp · къдрица · wget · Кой · кой съм аз · В · iptables · ssh-keygen · ufw

СВЪРЗАНИ: Най-добрите Linux лаптопи за разработчици и ентусиасти

ПРОЧЕТЕТЕ СЛЕДВАЩО Снимка на профила на Дейв Маккей Дейв Маккей
Дейв Маккей за първи път използва компютри, когато перфорираната хартиена лента беше на мода и оттогава той програмира. След повече от 30 години в ИТ индустрията, той вече е технологичен журналист на пълен работен ден. По време на кариерата си той е работил като програмист на свободна практика, мениджър на международен екип за разработка на софтуер, ръководител на проекти за ИТ услуги и, последно, като служител по защита на данните. Неговото писане е публикувано от howtogeek.com, cloudsavvyit.com, tenterpriser.com и opensource.com. Дейв е евангелист на Linux и привърженик на отворен код.
Прочетете пълната биография

Интересни Статии