Cum de a Rula și de a Controla Procesele de Fundal pe Linux

  • Dave McKay

    @TheGurkha

  • 24 septembrie 2019, ora 8:00 EDT
Fatmawati Achmad Zaenuri/.com

foloseste Bash shell în Linux pentru a gestiona prim-plan și de fundal procese. Puteți utiliza funcțiile și semnalele de control job Bash pentru a vă oferi mai multă flexibilitate în modul în care executați comenzi. Vă arătăm cum.

totul despre procese

ori de câte ori un program este executat într-un sistem de operare Linux sau Unix, un proces este pornit., „Proces” este numele reprezentării interne a programului de executare în memoria computerului. Există un proces pentru fiecare program activ. De fapt, există un proces pentru aproape tot ceea ce se execută pe computer. Aceasta include componentele mediului desktop grafic (GDE), cum ar fi GNOME sau KDE, și demonii de sistem care sunt lansați la pornire.

De ce aproape tot ceea ce se execută? Ei bine, built-in-urile Bash, cum ar fi cd, pwd și alias, nu trebuie să aibă un proces lansat (sau „născut”) atunci când sunt rulate., Bash execută aceste comenzi în instanța shell-ului Bash care rulează în fereastra terminalului. Aceste comenzi sunt rapide tocmai pentru că nu trebuie să aibă un proces lansat pentru a le executa. (Puteți introduce help într-o fereastră terminal pentru a vedea lista de Bash built-in-uri.procesele pot rula în prim-plan, caz în care preiau terminalul dvs. până când s-au finalizat sau pot fi rulate în fundal., Procesele care rulează în fundal nu domină fereastra terminalului și puteți continua să lucrați în ea. Sau cel puțin, nu domină fereastra terminalului dacă nu generează ieșire pe ecran.

un exemplu dezordonat

vom începe un simpluping trace running. Vom ping domeniul Cum să Geek. Acest lucru se va executa ca un proces prim-plan.

ping www.howtogeek.com

obținem rezultatele așteptate, derulând în jos fereastra terminalului. Nu putem face nimic altceva în fereastra terminalului în timp ce ping rulează., Pentru a termina comanda lovit Ctrl+C.

Ctrl+C

efectul vizibil al Ctrl+C este evidențiată în captura de ecran. ping oferă un scurt rezumat și apoi se oprește.

publicitate

să repetăm asta. Dar de data aceasta vom lovi Ctrl+Zîn loc de Ctrl+C. Sarcina nu se va termina. Va deveni o sarcină de fundal. Obținem controlul ferestrei terminalului returnat la noi.,

ping www.howtogeek.com
Ctrl+Z

efectul vizibil de a lovi Ctrl+Z este evidențiată în captura de ecran.de data aceasta ni se spune că procesul este oprit. Oprit nu înseamnă terminat. E ca o mașină la un semn de oprire. Nu l-am casat și l-am aruncat. Este încă pe drum, staționar, așteptând să plece. Procesul este acum un loc de muncă de fundal.

comanda jobs va lista lucrările care au fost pornite în sesiunea curentă a terminalului., Și pentru că joburile sunt (inevitabil) procese, putem folosi și comanda ps pentru a le vedea. Să folosim ambele comenzi și să comparăm ieșirile lor. Vom folosi opțiuneaT opțiune (terminal) pentru a lista numai procesele care rulează în această fereastră terminal. Rețineți că nu este nevoie să utilizați o cratimă - cu opțiunea T.

jobs
ps T

jobs comanda ne spune:

  • : numărul din paranteze reprezintă numărul de locuri de muncă., Putem folosi acest lucru pentru a ne referi la job atunci când trebuie să-l controlăm cu comenzi de control job.
  • +: semnul plus+ arată că acesta este jobul asupra căruia se va acționa dacă folosim o comandă de control al jobului fără un anumit număr de job. Se numește lucrarea implicită. Jobul implicit este întotdeauna cel mai recent adăugat la lista de joburi.
  • oprit: procesul nu se execută.
  • ping www.howtogeek.com: linia de comandă care a lansat procesul.,

comanda ps ne spune:

  • PID: ID-ul procesului procesului. Fiecare proces are un ID unic.
  • TTY: pseudo-teletype (terminal window) din care a fost executat procesul.
  • STAT: starea procesului.
  • timp: cantitatea de timp CPU consumată de proces.
  • comandă: Comanda care a lansat procesul.acestea sunt valori comune pentru coloana STAT:
    • D: somn neîntrerupt. Procesul este într-o stare de așteptare, de obicei de așteptare pentru intrare sau de ieșire, și nu poate fi întreruptă.,
    • I: inactiv.
    • R: rulează.
    • S: somn întreruptibil.
    • T: Oprit de un semnal de control de locuri de muncă.
    • Z: un proces zombie. Procesul a fost încheiat, dar nu a fost „curățat” de procesul părinte.
    Publicitate

    valoarea în STAT coloana poate fi urmat de unul din aceste extra indicatori:

    • <: sarcină de Mare prioritate (nu-i frumos să-alte procese).
    • N: prioritate scăzută (plăcută altor procese).
    • L: procesul are pagini blocate în memorie (utilizate de obicei de procesele în timp real).,
    • s: un lider de sesiune. Un lider de sesiune este un proces care a lansat grupuri de proces. Un shell este un lider de sesiune.
    • l: proces Multi-thread.
    • +: un proces prim-plan.

    putem vedea că Bash are o stare de Ss. Majuscule ” S ” ne spun Shell Bash este de dormit, și este întreruptible. De îndată ce avem nevoie, va răspunde. Minuscule ” s ” ne spune că shell-ul este un lider de sesiune.

    comanda ping are o stare de T., Acest lucru ne spune că ping a fost oprit de un semnal de control de locuri de muncă. În acest exemplu, acesta a fost Ctrl+Z pe care l-am pus în fundal.

    comanda ps T are o stare de R, care înseamnă rularea. + indică faptul că acest proces este un membru al grupului prim-plan. Deci comanda ps T rulează în prim-plan.

    comanda bg

    comanda bg este utilizată pentru a relua un proces de fundal., Acesta poate fi utilizat cu sau fără un număr de locuri de muncă. Dacă îl folosești fără un număr de job, jobul implicit este adus în prim plan. Procesul rulează încă în fundal. Nu puteți trimite nicio intrare.

    Publicitate

    Dacă am problema bg comanda, ne vom relua ping command:

    bg

    ping comanda de cv-uri si vom vedea defilare de ieșire în fereastra terminalului, o dată mai mult. Numele comenzii care a fost repornită este afișat pentru dvs., Acest lucru este evidențiat în captura de ecran.

    dar avem o problemă. Sarcina se execută în fundal și nu va accepta de intrare. Deci, cum o oprim? Ctrl+C nu face nimic. O putem vedea când o tastăm, dar sarcina de fundal nu primește acele apăsări de taste, astfel încât să păstreze ping-ul vesel.

    publicitate

    de fapt, suntem acum într-un mod ciudat amestecat. Putem tasta în fereastra terminalului, dar ceea ce tastăm este rapid îndepărtat de ieșirea de defilare din comanda ping. Orice tastăm intră în vigoare în prealabil.,pentru a opri sarcina noastră de fundal, trebuie să o aducem în prim plan și apoi să o oprim.

    comanda fg

    comanda fg va aduce o sarcină de fundal în prim-plan. La fel ca comanda bg, poate fi utilizată cu sau fără un număr de job. Folosind-o cu un număr de locuri de muncă înseamnă că va funcționa pe un anumit loc de muncă. În cazul în care este utilizat fără un număr de locuri de muncă ultima comandă care a fost trimis la fundal este utilizat.

    dacă tastăm fg comanda noastră ping va fi adusă în prim-plan., Caracterele pe care le tastăm sunt amestecate cu ieșirea din comanda ping, dar sunt operate de shell ca și cum ar fi fost introduse pe linia de comandă ca de obicei. Și, de fapt, din punctul de vedere al shell-ului Bash, exact asta s-a întâmplat.

    fg
    Publicitate

    Și acum, că avem ping comandă execută în prim-plan o dată mai mult, putem folosi Ctrl+C să-l omoare.

    Ctrl+C

    trebuie să trimitem semnalele corecte

    care nu au fost tocmai drăguțe., În mod evident, rularea unui proces în fundal funcționează cel mai bine atunci când procesul nu produce ieșire și nu necesită intrare.

    dar, dezordonat sau nu, exemplul nostru a realizat:

    • punerea unui proces în fundal.
    • restaurarea procesului la o stare de funcționare în fundal.
    • revenirea procesului în prim-plan.
    • terminarea procesului.

    când utilizați Ctrl+C și Ctrl+Z , trimiteți semnale procesului. Acestea sunt modalități prescurtate de utilizare a comenzii kill., Există 64 de semnale diferite pe care kill le poate trimite. Utilizați kill -l la linia de comandă pentru a le lista. kill nu este singura sursă a acestor semnale. Unele dintre ele sunt ridicate automat de alte procese din sistem

    iată câteva dintre cele utilizate în mod obișnuit.

    • SIGHUP: semnal 1. Trimis automat la un proces atunci când terminalul se execută în este închis.
    • SIGINT: semnal 2. Trimis la un proces te-a lovit Ctrl+C. Procesul este întrerupt și i se spune să înceteze.,
    • SIGQUIT: semnal 3. Trimis la un proces dacă utilizatorul trimite un semnal quit Ctrl+D.
    • SIGKILL: semnal 9. Procesul este imediat ucis și nu va încerca să închidă curat. Procesul nu coboară grațios.
    • SIGTERM: semnal 15. Acesta este semnalul implicit trimis de kill. Este semnalul standard de terminare a programului.
    • SIGTSTP: semnal 20. Trimis la un proces atunci când utilizați Ctrl+Z. Oprește procesul și îl pune în fundal.,

    trebuie să folosim comanda kill pentru a emite semnale care nu au combinații de taste atribuite acestora.

    controlul suplimentar al lucrării

    un proces mutat în fundal folosindCtrl+Z este plasat în starea oprită. Trebuie să folosim comanda bg pentru a o porni din nou. Pentru a lansa un program ca un proces de fundal care rulează este simplu. Adăugați un ampersand & la sfârșitul liniei de comandă.,deși cel mai bine este ca procesele de fundal să nu scrie în fereastra terminalului, vom folosi exemple care o fac. Trebuie să avem ceva în capturile de ecran la care ne putem referi. Această comandă va începe o buclă nesfârșită ca proces de fundal:

    în timp ce este adevărat; faceți ecou „cum să faceți procesul de buclă Geek”; sleep 3; done &

    ni se spune numărul postului și ID-ul procesului id al procesului. Numărul postului nostru este 1, iar id-ul procesului este 1979. Putem folosi acești identificatori pentru a controla procesul.,

    publicitate

    ieșirea din bucla noastră nesfârșită începe să apară în fereastra terminalului. Ca și înainte, putem folosi linia de comandă, dar orice comenzi pe care le emitem sunt intercalate cu ieșirea din procesul de buclă.

    este

    Pentru a opri procesul nostru putem folosi jobs să ne reamintim ce numărul de locuri de muncă este, și de a folosi apoi kill.

    jobs raportează că procesul nostru este numărul postului 1. Pentru a utiliza acest număr cu kill trebuie să preceadă cu un semn la sută %.,

    jobs
    kill %1

    kill trimite SIGTERM semnal, semnal numărul 15, a procesului și este încheiată. Când tasta Enter este apăsată apoi, este afișată o stare a lucrării. Acesta listează procesul ca ” terminat.”În cazul în care procesul nu răspunde la kill comanda puteți să-l ia o crestătură. Utilizați killcu SIGKILL, numărul semnalului 9. Doar puneți numărul 9 între comanda kill numărul jobului.,

    kill 9 %1

    Lucrurile de care Ne-am Acoperit

    • Ctrl+C: Trimite SIGINT, 2 de semnal, la procesul—dacă este acceptat de intrare—și spune-l pentru a termina.
    • Ctrl + D: trimite SISQUIT, semnal 3, la proces—dacă acceptă intrarea—și îi spune să renunțe.
    • Ctrl + Z: trimite SIGSTP, semnal 20, la proces și îi spune să se oprească (suspende) și să devină un proces de fundal.
    • joburi: listează joburile de fundal și arată numărul lor de job.
    • bg job_number: repornește un proces de fundal., Dacă nu furnizați un număr de locuri de muncă ultimul proces care a fost transformat într-o sarcină de fundal este utilizat.
    • FG job_number: aduce un proces de fundal în prim-plan și îl repornește. Dacă nu furnizați un număr de locuri de muncă ultimul proces care a fost transformat într-o sarcină de fundal este utilizat.
    • commandline &: Adăugarea unui ampersand & la sfârșitul anului o linie de comandă execută comanda ca o sarcină de fundal, pe care se execută.
    • kill % job_number: trimite SIGTERM, semnal 15, la procesul de a termina.,
    • ucide 9 %job_number: Trimite SIGKILL, semnal 9, la procesul și se termină brusc.

    RELATED: cum să ucizi procesele de pe terminalul Linux

    Dave McKay
    Dave McKay a folosit pentru prima dată computerele când banda de hârtie perforată era în vogă și de atunci programează. După peste 30 de ani în industria IT, acum este jurnalist tehnologic cu normă întreagă., În timpul carierei sale, a lucrat ca programator independent, manager al unei echipe internaționale de dezvoltare de software, manager de proiect pentru servicii IT și, cel mai recent, ca responsabil cu protecția datelor. Dave este un evanghelist Linux și avocat open source.Citeste tot Bio ”

Leave a Comment