A háttérfolyamatok futtatása és vezérlése Linuxon

  • Dave McKay

    @TheGurkha

  • 2019.szeptember 24., 8:00am EDT
Fatmawati Achmad Zaenuri/. com

használja a Bash Shell-t Linuxban az előtér-és háttérfolyamatok kezeléséhez. A Bash feladatvezérlő funkcióival és jeleivel nagyobb rugalmasságot biztosíthatsz a parancsok futtatásában. Megmutatjuk, hogyan.

minden a folyamatokról

amikor egy programot Linux vagy Unix-szerű operációs rendszerben hajtanak végre, egy folyamat elindul., A “folyamat” a végrehajtó program belső ábrázolásának neve a számítógép memóriájában. Minden aktív programhoz van egy folyamat. Valójában, van egy folyamat szinte mindent, ami fut a számítógépen. Ez magában foglalja a grafikus asztali környezet (gde) összetevőit, mint például a GNOME vagy a KDE, valamint az indításkor elindított rendszer démonokat.

miért szinte minden, ami fut? Nos, Bash beépített, mint a cd, pwd, és alias nem kell, hogy egy folyamat indult (vagy “szült”), amikor fut., A Bash végrehajtja ezeket a parancsokat a terminálablakban futó Bash shell példányán belül. Ezek a parancsok pontosan azért gyorsak, mert nem kell elindítaniuk a végrehajtáshoz szükséges folyamatot. (A terminálablakban beírhatja a help parancsot a Bash beépített listájának megtekintéséhez.)

reklám

folyamatok futhatnak az előtérben, ebben az esetben átveszik a terminált, amíg befejeződnek, vagy a háttérben futtathatók., A háttérben futó folyamatok nem uralják a terminálablakot, így továbbra is dolgozhat benne. Vagy legalábbis nem uralják a terminálablakot, ha nem generálnak képernyő kimenetet.

rendetlen példa

elindítunk egy egyszerű ping trace futást. Mi lesz a ping A How-To Geek domain. Ez végrehajtja, mint egy előtérben folyamat.

ping www.howtogeek.com

megkapjuk a várt eredményeket, lefelé görgetve a terminál ablakot. Nem tehetünk mást a terminál ablakban, miközben a ping fut., Hogy megszüntesse a parancsot hit Ctrl+C.

Ctrl+C

a Ctrl+C látható hatása kiemelésre kerül a képernyőképen. ping rövid összefoglalót ad, majd megáll.

reklám

ismételjük meg. De ezúttal a Ctrl+Z helyett Ctrl+C. A feladat nem szűnik meg. Ez lesz a háttér feladat. Megkapjuk az irányítást a terminál ablak vissza hozzánk.,

ping www.howtogeek.com
Ctrl+Z

az ütés látható hatása Ctrl+Z kiemelésre kerül a képernyőképen.

ezúttal azt mondják, hogy a folyamat leáll. A leállítás nem jelenti azt, hogy megszűnik. Olyan, mint egy autó a stop táblánál. Nem selejteztük és dobtuk el. Még mindig az úton van, álló helyzetben, várva, hogy menjen. A folyamat most háttérmunka.

a jobs parancs felsorolja azokat a munkákat, amelyek az aktuális terminál munkamenetben elindultak., Mivel a feladatok (elkerülhetetlenül) folyamatok, aps parancsot is használhatjuk ezek megtekintéséhez. Használjuk mindkét parancsot, és hasonlítsuk össze a kimeneteket. AT opció (terminál) opcióval csak az ebben a terminálablakban futó folyamatokat soroljuk fel. Vegye figyelembe, hogy nincs szükség kötőjelre - a T opcióval.

jobs
ps T

a jobs parancs jelzi:

  • : A szögletes zárójelben lévő szám a munkaszám., Ezt arra használhatjuk, hogy utaljunk a munkára, amikor feladatvezérlő parancsokkal kell irányítanunk.
  • +: a + pluszjel azt mutatja, hogy ez az a feladat, amelyre akkor kerül sor, ha EGY job control parancsot használunk egy adott munkaszám nélkül. Ez az alapértelmezett feladat. Az alapértelmezett feladat mindig az, amelyet legutóbb hozzáadtak a munkahelyek listájához.
  • leállítva: a folyamat nem fut.
  • ping www.howtogeek.com: a folyamatot elindító parancssor.,

a ps parancs azt mondja:

  • pid: a folyamat folyamat azonosítója. Minden folyamat egyedi azonosítóval rendelkezik.
  • TTY: a pszeudo-teletípus (terminál ablak), amelyből a folyamatot végrehajtották.
  • STAT: a folyamat állapota.
  • idő: a folyamat által fogyasztott CPU idő mennyisége.
  • parancs: a folyamatot elindító parancs.

ezek a STAT oszlop általános értékei:

  • D: Szünetmentes alvás. A folyamat várakozási állapotban van, általában bemenetre vagy kimenetre vár, és nem szakítható meg.,
  • I: Idle.
  • R: futás.
  • S: megszakítható alvás.
  • T: állásvezérlő jel által leállítva.
  • Z: egy zombi folyamat. A folyamatot megszüntették, de a szülő folyamat nem “tisztította le”.
reklám

a STAT oszlopban szereplő értéket ezen extra mutatók egyike követheti:

  • <: kiemelt feladat (nem kedves más folyamatokhoz).
  • N: alacsony prioritású (kedves más folyamatokhoz).
  • L: a folyamat oldalai memóriába vannak zárva (általában valós idejű folyamatok használják).,
  • s: a session leader. A munkamenet vezetője olyan folyamat, amely folyamatcsoportokat indított el. A héj egy munkamenet vezetője.
  • l: többszálú folyamat.
  • +: előtér folyamat.

láthatjuk, hogy Bash állapota Ss. A nagybetűs ” s ” azt mondja nekünk, hogy a Bash héj alszik, és megszakítható. Amint szükségünk van rá, válaszolni fog. A kisbetűs ” s ” azt mondja, hogy a héj egy munkamenet vezetője.

a ping parancs állapota T., Ez azt mondja nekünk, hogy aping job vezérlő jel állította le. Ebben a példában ez volt aCtrl+Z, amelyet a háttérbe helyeztünk.

aps T parancs állapotaR, ami a futást jelenti. A + azt jelzi, hogy ez a folyamat az előtércsoport tagja. Tehát aps T parancs fut az előtérben.

a BG parancs

a bg parancs a háttérfolyamat folytatására szolgál., Ezt fel lehet használni, vagy anélkül a munka számát. Ha munkaszám nélkül használja, az alapértelmezett feladat előtérbe kerül. A folyamat továbbra is a háttérben fut. Nem küldhet semmilyen bemenetet hozzá.

hirdetés

ha kiadjuk a bg parancsot, akkor folytatjuk a ping parancsot:

bg

a ping a div > parancs újraindul, a görgetés kimenetét pedig még egyszer látjuk a terminálablakban. Az újraindított parancs neve megjelenik az Ön számára., Ez kiemelve van a képernyőképen.

de van egy probléma. A feladat a háttérben fut, nem fogadja el a bemenetet. Hogy állítsuk meg? Ctrl+C nem csinál semmit. Láthatjuk, amikor beírjuk, de a háttérfeladat nem kapja meg ezeket a billentyűleütéseket, így vidáman távol tartja.

reklám

valójában most furcsa kevert módban vagyunk. Beírhatjuk a terminál ablakot, de amit beírunk, gyorsan eltűnik a ping parancs görgetési kimenete. Bármi, amit gépelünk, az előre történik.,

a háttérfeladatunk leállításához az előtérbe kell hoznunk, majd meg kell állítanunk.

az fg parancs

a fg parancs háttérfeladatot hoz az előtérbe. Csakúgy, mint a bg parancs, használható munkaszámmal vagy anélkül. A munka számával történő használata azt jelenti, hogy egy adott munkahelyen fog működni. Ha munkaszám nélkül használja, akkor a háttérre küldött utolsó parancsot használja.

hafgping parancs kerül előtérbe., A karakterek típusú vegyes a kimenetet a ping parancs, de ők működtetik a shell, mintha volna be a parancssorban, mint mindig. Sőt, a Bash shell szempontjából pontosan ez történt.

fg
hirdetés

és most, hogy már a pingparancs fut az előtérben még egyszer, akkor a Ctrl+C megölni.

Ctrl+C

megfelelő jeleket kell küldenünk

Ez nem volt pontosan szép., Nyilvánvaló, hogy egy folyamat futtatása a háttérben akkor működik a legjobban, ha a folyamat nem termel kimenetet, és nem igényel bemenetet.

de, rendetlen vagy sem, példánk megvalósította:

  • egy folyamat háttérbe helyezése.
  • a folyamat visszaállítása futó állapotba a háttérben.
  • a folyamat visszatérése az előtérbe.
  • a folyamat befejezése.

ha Ctrl+Cés Ctrl+Z jeleket küld a folyamatnak. Ezek a kill parancs gyorsírási módjai., Vannak 64 különböző jelek, hogy kill küldhet. Használja akill -l parancsot a felsoroláshoz. kill nem az egyetlen forrása ezeknek a jeleknek. Néhány közülük automatikusan emelkedik a rendszeren belüli egyéb folyamatok

Íme néhány a leggyakrabban használt folyamatok közül.

  • SIGHUP: Signal 1. Automatikusan elküldi a folyamat, amikor a terminál fut be van zárva.
  • SIGINT: Signal 2. Küldött egy folyamat megüt Ctrl+C. A folyamat megszakad, és azt mondják, hogy vessen véget.,
  • SIGQUIT: Signal 3. Elküldve egy folyamatba, ha a felhasználó kilépési jelet küld Ctrl+D.
  • SIGKILL: Signal 9. A folyamatot azonnal megölik, és nem kísérlik meg tisztán lezárni. A folyamat nem kecsesen megy le.
  • SIGTERM: Signal 15. Ez az alapértelmezett jel, amelyet a killküld. Ez a szokásos programvégződési jel.
  • SIGTSTP: Signal 20. Küldött egy folyamat, ha használja Ctrl+Z. Leállítja a folyamatot, és a háttérbe helyezi.,

a kill parancsot kell használnunk olyan jelek kiadásához, amelyek nem rendelkeznek hozzájuk rendelt billentyűkombinációkkal.

további Feladatvezérlés

a Ctrl+Z használatával a folyamat a háttérbe került. Abg parancsot kell használnunk az újraindításhoz. A program futó háttérfolyamatként történő elindítása egyszerű. Csatoljon egy & jelet a parancssor végére.,

reklám

bár a legjobb, ha a háttérfolyamatok nem írnak a terminál ablakba,példákat fogunk használni. Szükségünk van valamire a képernyőképeken, amelyekre hivatkozhatunk. Ez a parancs egy végtelen hurkot indít háttérfolyamatként:

míg igaz; do echo “How-To Geek Loop Process”; sleep 3; done &

megmondjuk a folyamat job számát és folyamatazonosítóját. Az állásunk száma 1, A folyamat azonosítója 1979. Ezeket az azonosítókat használhatjuk a folyamat vezérlésére.,

reklám

a végtelenített hurok kimenete megjelenik a terminálablakban. Mint korábban, használhatjuk a parancssort, de az általunk kiadott parancsok a hurok folyamat kimenetével vannak átfedve.

ls

a folyamat leállításához használhatjuk a jobs – ot, hogy emlékeztessük magunkat, mi a munkaszám, majd használjuk a kill.

jobs azt jelenti, hogy a folyamatunk az 1.feladatszám. Ahhoz, hogy ezt a számot kill meg kell előzni egy százalékos jel %.,

jobs
kill %1

killelküldi a SIGTERM jelet, a 15-ös jelet a folyamatba, és megszűnik. Amikor az Enter billentyűt megnyomja, megjelenik a feladat állapota. A folyamatot “befejezettnek” nevezi.”Ha a folyamat nem reagál a kill parancsra, akkor felveheti egy bevágást. Use kill with , signal number 9. Csak tegye a 9-es számot akill parancs közé.,

kill 9 %1

  • Ctrl+C: Sends SIGINT, signal 2, to the process—if it is accepting input—and tells it to terminate.
  • Ctrl+D: Sends SISQUIT, signal 3, to the process—if it is accepting input—and says it to quit.
  • Ctrl+Z: Sends SIGSTP, signal 20, to the process and says it to stop (suspend) and become a background process.
  • jobs: felsorolja a háttérmunkákat, és megmutatja a munkaszámot.
  • bg job_number: újraindít egy háttérfolyamatot., Ha nem ad meg munkaszámot, akkor az utolsó folyamat, amely háttérfeladattá vált, a rendszer ezt használja.
  • FG job_number: egy háttérfolyamatot hoz az előtérbe, majd újraindítja. Ha nem ad meg munkaszámot, akkor az utolsó folyamat, amely háttérfeladattá vált, a rendszer ezt használja.
  • parancssor&: egy& egy parancssor végére végrehajtja ezt a parancsot háttérfeladatként, amely fut.
  • kill % job_number: Sends SIGTERM, signal 15, to the process to terminate it.,
  • kill 9% job_number: Sends , signal 9, to the process and terminates it sharply.

kapcsolódó: Hogyan lehet megölni a folyamatokat a Linux terminálról

Dave McKay
Dave McKay először használt számítógépeket, amikor a lyukasztott papírszalag divatos volt, és azóta programozik. Több mint 30 év után az informatikai iparban, most teljes munkaidős technológiai újságíró., Karrierje során szabadúszó programozóként, egy nemzetközi szoftverfejlesztő csapat menedzsereként, informatikai szolgáltatási projektmenedzserként, legutóbb pedig Adatvédelmi tisztviselőként dolgozott. Dave egy Linux evangélista és nyílt forráskódú szószólója.Olvassa el a teljes Bio ”

Leave a Comment