- Dave McKay
@TheGurkha
- 2019.szeptember 24., 8:00am EDT
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.)
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.
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”.
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á.
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.
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.
hafg
ping
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
és most, hogy már a ping
parancs 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
kill
kü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.,
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.,
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
kill
elkü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 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 ”