Háttérfolyamatok futtatása és vezérlése Linuxon

Használja a Bash shellt Linuxban az előtérben és a háttérben zajló folyamatok kezelésére. Használhatja a Bash feladatvezérlő funkcióit és jeleit, hogy nagyobb rugalmasságot biztosítson a parancsok futtatásához. Megmutatjuk, hogyan.

Mindent a folyamatokról

Amikor egy programot Linux vagy Unix-szerű operációs rendszerben futtatnak, egy folyamat elindul. A „folyamat” a végrehajtó program belső reprezentációjának neve a számítógép memóriájában. Minden aktív programhoz létezik egy folyamat. Valójában szinte mindenre van folyamat, ami a számítógépén fut. Ez magában foglalja az Ön összetevőit grafikus asztali környezet (GDE), mint pl GNOME vagy KDE, és rendszer démonok amelyek induláskor elindulnak.

Miért majdnem minden, ami fut? Nos, a Bash beépített, mint pl CD, pwd, és álnév nem kell folyamatot elindítani (vagy „szpotolni”), amikor futnak. A Bash ezeket a parancsokat a terminálablakban futó Bash shell példányán belül hajtja végre. Ezek a parancsok éppen azért gyorsak, mert végrehajtásukhoz nincs szükségük folyamat elindítására. (A súgó beírásával egy terminálablakba megtekintheti a Bash beépített listáját.)

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

Zavaros példa

Elindítunk egy egyszerű ping-et futás nyoma. Pingelni fogjuk a How-To Geek domaint. Ez előtérbeli folyamatként fog végrehajtani.

ping www.wdzwdz.com

A terminál ablakában lefelé görgetve megkapjuk a várt eredményeket. A ping futása közben nem tehetünk mást a terminálablakban. A parancs befejezéséhez nyomja meg a Ctrl+C billentyűkombinációt.

Ctrl+C

A Ctrl+C látható hatása kiemelve van a képernyőképen. A ping rövid összefoglalót ad, majd leáll.

Ismételjük meg. De ezúttal a Ctrl+Z billentyűkombinációt fogjuk lenyomni a Ctrl+C helyett. A feladat nem szakad meg. Háttérfeladat lesz. Visszakapjuk a terminálablak vezérlését.

ping www.wdzwdz.com
Ctrl+Z

A Ctrl+Z leütésének látható hatása kiemelten látható a képernyőképen.

Ezúttal azt mondják, a folyamat leállt. A leállított nem azt jelenti, hogy megszűnt. Olyan, mint egy autó a stoptáblánál. Nem selejteztük ki és nem dobtuk ki. Még mindig úton van, állva vár, hogy induljon. A folyamat most háttérmunka.

A munkahelyek parancsa felsorolja a munkákat amelyeket az aktuális terminálmunkamenetben indítottak el. És mivel a jobok (elkerülhetetlenül) folyamatok, a ps paranccsal is láthatjuk őket. Használjuk mindkét parancsot, és hasonlítsuk össze a kimeneteiket. A T opció (terminál) opciót csak az ebben a terminálablakban futó folyamatok felsorolására fogjuk használni. Vegye figyelembe, hogy nincs szükség kötőjel használatára – a T opcióval.

jobs
ps T

A jobs parancs azt mondja nekünk:

  Hogyan nézzünk Plexet a barátokkal

[1]: A szögletes zárójelben lévő szám a munka száma. Ezt használhatjuk a jobra való hivatkozásra, amikor azt jobvezérlő parancsokkal kell vezérelnünk.
+: A pluszjel + azt mutatja, hogy ez az a job, amelyre a rendszer reagál, ha egy jobvezérlő parancsot használunk meghatározott jobszám nélkül. Ezt alapértelmezett feladatnak nevezik. Az alapértelmezett feladat mindig az, amelyik utoljára került a feladatok listájához.
Leállítva: A folyamat nem fut.
ping www.wdzwdz.com: A folyamatot elindító parancssor.

A ps parancs azt mondja nekünk:

PID: A folyamat folyamatazonosítója. Minden folyamatnak egyedi azonosítója van.
TTY: Az a pszeudo-teletípus (terminálablak), amelyből a folyamat végrehajtásra került.
STAT: A folyamat állapota.
IDŐ: A folyamat által felhasznált CPU-idő mennyisége.
PARANCS: A folyamatot elindító parancs.

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

D: Megszakíthatatlan alvás. A folyamat várakozó állapotban van, általában bemenetre vagy kimenetre vár, és nem szakítható meg.
Én: Tétlen.
R: Futás.
S: Megszakítható alvás.
T: Egy feladatvezérlő jel leállította.
Z: Zombi folyamat. A folyamatot leállították, de a szülőfolyamat nem „tisztította le”.

A STAT oszlopban lévő értéket az alábbi extra indikátorok egyike követheti:

<: high-priority="" task="" nice="" to="" other="" processes="" n:="" low-priority="" l:="" process="" has="" pages="" locked="" into="" memory="" used="" by="" real-time="" s:="" a="" session="" leader.="" leader="" is="" that="" launched="" groups.="" shell="" multi-thread="" process.="" foreground="">Láthatjuk, hogy Bashnak Ss állapota van. A nagy „S” azt jelzi, hogy a Bash shell alszik, és megszakítható. Amint szükségünk lesz rá, válaszolni fog. A kis „s” azt jelzi, hogy a shell egy munkamenet-vezér.

A ping parancs állapota T. Ez azt jelzi, hogy a ping leállt egy jobvezérlő jel. Ebben a példában ez volt a Ctrl+Z, amellyel a háttérbe helyeztük.

A ps T parancsnak R állapota van, ami a futást jelenti. A + azt jelzi, hogy ez a folyamat az előtércsoport tagja. Tehát a ps T parancs fut az előtérben.

A bg parancs

A bg parancs egy háttérfolyamat folytatására szolgál. Munkaszámmal vagy anélkül is használható. Ha feladatszám nélkül használja, az alapértelmezett feladat kerül előtérbe. A folyamat továbbra is a háttérben fut. Nem küldhet semmilyen bemenetet rá.

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

bg

A ping parancs folytatódik, és ismét látjuk a görgető kimenetet a terminál ablakában. Megjelenik az újraindított parancs neve. Ez kiemelve van a képernyőképen.

De van egy problémánk. A feladat a háttérben fut, és nem fogad bevitelt. Szóval hogyan állítsuk meg? A 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 továbbra is vidáman pingál.

  Hogyan kereshet szöveget több PDF-fájlban anélkül, hogy megnyitná őket

Valójában most egy furcsa kevert módban vagyunk. Beírhatjuk a terminálablakba, de amit begépelünk, azt gyorsan elsöpri a ping parancs görgető kimenete. Bármi, amit beírunk, az előtérben érvényesül.

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

Az fg parancs

Az fg parancs egy háttérfeladatot hoz az előtérbe. Csakúgy, mint a bg parancs, ez is használható feladatszámmal vagy anélkül. Munkaszámmal történő használata azt jelenti, hogy egy adott feladaton fog működni. Ha feladatszám nélkül használja, az utolsó, háttérbe küldött parancs kerül felhasználásra.

Ha beírjuk az fg-t, a ping parancsunk előtérbe kerül. Az általunk beírt karakterek összekeverednek a ping parancs kimenetével, de a shell úgy kezeli őket, mintha a szokásos módon a parancssorba írták volna be. És valójában a Bash shell szemszögéből nézve pontosan ez történt.

fg

És most, hogy ismét fut a ping parancs az előtérben, a Ctrl+C segítségével megölhetjük.

Ctrl+C

A megfelelő jeleket kell küldenünk

Ez nem volt éppen szép. Nyilvánvalóan egy folyamat háttérben történő futtatása akkor működik a legjobban, ha a folyamat nem termel kimenetet és nem igényel bevitelt.

De akár rendetlen, akár nem, a példánk teljesítette:

Egy folyamat háttérbe helyezése.
A folyamat visszaállítása futó állapotba a háttérben.
A folyamat visszaállítása az előtérbe.
A folyamat befejezése.

Ha a Ctrl+C és a Ctrl+Z billentyűket használja, akkor jeleket küld a folyamatnak. Ezek gyorsírási módok a kill parancs használatáról. Vannak 64 különböző jel hogy ölni tud küldeni. Használja a kill -l parancsot a listához. A kill nem az egyetlen forrása ezeknek a jeleknek. Ezek egy részét a rendszeren belüli más folyamatok automatikusan emelik

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

SIGHUP: 1. jel. Automatikusan elküldve egy folyamatnak, amikor a terminál, amelyben fut, bezárul.
SIGINT: 2. jel. Elküldve a Ctrl+C billentyűkombinációt lenyomott folyamatnak. A folyamat megszakad, és azt mondják, hogy fejezze be.
SIGQUIT: 3. jel. Elküldve egy folyamatnak, ha a felhasználó kilépési jelet küld Ctrl+D.
SIGKILL: 9. jelzés. A folyamat azonnal leáll, és nem kísérli meg tisztán lezárni. A folyamat nem megy le kecsesen.
SIGTERM: 15. jel. Ez a kill által küldött alapértelmezett jel. Ez a szabványos programlezáró jel.
SIGTSTP: 20. jel. A Ctrl+Z billentyűkombináció használatakor elküldve egy folyamatnak. Leállítja a folyamatot, és háttérbe szorítja.

  Az App Library használata iPhone készüléken

A kill parancsot kell használnunk olyan jelek kiadására, amelyekhez nincs billentyűkombináció hozzárendelve.

További munkaellenőrzés

A Ctrl+Z billentyűkombinációval háttérbe helyezett folyamat leállított állapotba kerül. Használnunk kell a bg parancsot, hogy újra futtassuk. A program elindítása futó háttérfolyamatként egyszerű. Adjon hozzá egy & jelet a parancssor végéhez.

Bár a legjobb, ha a háttérfolyamatok nem írnak a terminálablakba, példákat fogunk használni, amelyek igen. Kell, hogy legyen valami a képernyőképeken, amire hivatkozhatunk. Ez a parancs egy végtelen ciklust indít el háttérfolyamatként:

míg igaz; echo „How-To Geek Loop Process”; alvás 3; Kész &

míg igaz;  visszhangozni

Megkapjuk a feladat számát és a folyamat azonosítóját. Munkánk száma 1, folyamatazonosítója 1979. Ezekkel az azonosítókkal tudjuk irányítani a folyamatot.

A végtelen hurkunk kimenete megjelenik a terminál ablakban. A korábbiakhoz hasonlóan használhatjuk a parancssort, de az általunk kiadott parancsok a ciklusfolyamat kimenetével vannak tarkítva.

ls

A folyamat leállításához használhatunk jobokat, hogy emlékeztessük magunkat a munkaszámra, majd a kill parancsot használhatjuk.

jobs azt jelenti, hogy a folyamatunk az 1. feladat. Ahhoz, hogy ezt a számot a killvel együtt használjuk, meg kell előznünk egy % előjelet.

jobs
kill %1

A kill elküldi a SIGTERM 15-ös jelet a folyamatnak, és az leáll. Az Enter gomb következő megnyomásakor megjelenik a feladat állapota. A folyamatot „lezártként” sorolja fel. Ha a folyamat nem válaszol a kill parancsra, növelheti azt. Használja a killt a SIGKILL-lel, 9-es számú jelet. Csak tegye a 9-es számot a kill parancs és a feladat száma közé.

kill 9 %1

Dolgok, amikkel foglalkoztunk

Ctrl+C: SIGINT, 2. jelet küld a folyamatnak – ha az elfogadja a bemenetet –, és felszólítja, hogy fejezze be.
Ctrl+D: elküldi a SISQUIT-ot, a 3. jelet a folyamatnak – ha az elfogadja a bevitelt –, és felszólítja, hogy lépjen ki.
Ctrl+Z: SIGSTP-t, a 20-as jelet küldi a folyamatnak, és utasítja, hogy álljon le (felfüggessze), és legyen háttérfolyamat.
munkák: Felsorolja a háttérmunkákat, és megjeleníti a munkaszámukat.
bg job_number: Újraindít egy háttérfolyamatot. Ha nem ad meg munkaszámot, a rendszer az utolsó folyamatot használja, amelyet háttérfeladattá alakítottak.
fg job_number: előtérbe hoz egy háttérfolyamatot, és újraindítja. Ha nem ad meg munkaszámot, a rendszer az utolsó folyamatot használja, amelyet háttérfeladattá alakítottak.
parancssor &: Ha egy & jelet ad hozzá a parancssor végéhez, akkor az adott parancs háttérfeladatként fut, amely fut.
kill %job_number: SIGTERM, 15. jelet küld a folyamatnak, hogy leállítsa.
kill 9 %job_number: SIGKILL 9-es jelet küld a folyamatnak, és hirtelen leállítja.