- Dave McKay
@TheGurkha
- 24. syyskuuta 2019, 8:00 EDT
Käyttää Bash-komentotulkki on Linux hallita etualalla ja tausta prosesseja. Voit käyttää Bashin työnohjaustoimintoja ja signaaleja antamaan sinulle enemmän joustavuutta komentojen käytössä. Näytämme miten.
kaikki prosesseista
aina kun ohjelma suoritetaan Linuxissa tai Unixin kaltaisessa käyttöjärjestelmässä, prosessi käynnistyy., ”Process” on nimi suoritusohjelman sisäiselle edustukselle tietokoneen muistissa. Jokaiselle aktiiviselle ohjelmalle on oma prosessinsa. Itse asiassa, on prosessi lähes kaiken, joka on käynnissä tietokoneella. Se sisältää komponentteja graafisen työpöydän environment (GDE), kuten GNOME tai KDE, ja järjestelmä demonit, jotka käynnistetään käynnistyksen.
miksi lähes kaikki, mikä on käynnissä? No, Bash sisäänrakennettu kuten cd, pwd, ja alias ei tarvitse käynnistää prosessia (tai ”kutu”), kun ne ajetaan., Bash suorittaa nämä komennot päätteikkunassasi olevan Bash-kuoren sisällä. Nämä komennot ovat nopeita juuri siksi, että niillä ei tarvitse olla käynnistettyä prosessia niiden suorittamiseen. (Voit kirjoittaa help
pääteikkunaan nähdäksesi luettelon bash-rakennuksista.)
Prosesseja voi olla käynnissä etualalla, jolloin he ottavat yli oman terminaalin, kunnes ne on saatettu päätökseen, tai ne voidaan ajaa taustalla., Taustalla kulkevat prosessit eivät dominoi pääteikkunaa ja siinä voi jatkaa työskentelyä. Tai ainakaan ne eivät dominoi pääteikkunaa, jos ne eivät luo näytön ulostuloa.
a Messy Example
We ’ ll start a simple ping
trace running. We ’re going to ping
The How-To Geek domain. Tämä suoritetaan etualaprosessina.
ping www.howtogeek.com
saamme odotetut tulokset, vierittämällä pääteikkunaa. Pääteikkunassa ei voi tehdä mitään muuta, kun ping
on käynnissä., Komentohitin Ctrl+C
päättäminen.
Ctrl+C
näkyvä vaikutus Ctrl+C
on korostettu kuvakaappaus. ping
antaa lyhyen yhteenvedon ja sitten pysähtyy.
toistetaan se. Mutta tällä kertaa iskemme Ctrl+Z
sijaan Ctrl+C
. Tehtävää ei lopeteta. Siitä tulee taustatehtävä. Saamme terminaalin ikkunan haltuumme.,
ping www.howtogeek.com
Ctrl+Z
näkyvän vaikutuksen osuminenCtrl+Z
korostuu kuvakaappauksessa.
tällä kertaa kerrotaan, että prosessi on pysähtynyt. Pysähtyminen ei tarkoita irtisanomista. Se on kuin auto stop-merkillä. Emme ole romuttaneet sitä ja heittäneet pois. Se on yhä tiellä, paikallaan, odottamassa lähtöä. Prosessi on nyt taustatyötä.
jobs
komento listaa työt, jotka on aloitettu vuonna nykyinen terminaali-istunnon., Ja koska työpaikat ovat (vääjäämättä) prosesseja, voimme myös käyttää ps
– komentoa niiden näkemiseen. Käytetään molempia komentoja ja verrataan niiden lähtöjä. Käytämme T
– vaihtoehtoa (terminaali) vain luetteloidaksemme tässä pääteikkunassa käynnissä olevat prosessit. Huomaa, että ei ole tarvetta käyttää väliviivaa -
, jossa T
vaihtoehto.
jobs
ps T
jobs
komento kertoo meille:
- : numero hakasulkeissa on työn määrä., Voimme käyttää tätä viittaamaan työhön, kun meidän täytyy hallita sitä työnohjauskomennoilla.
- +: plus-merkki
+
osoittaa, että tämä on se työ, johon ryhdytään, jos käytämme työnohjauskomennusta ilman tiettyä työnumeroa. Sitä kutsutaan oletustyöksi. Oletustyö on aina se, joka on viimeksi lisätty työpaikkalistalle. - lopetti: prosessi ei ole käynnissä.
- ping www.howtogeek.com: prosessin käynnistänyt komentorivi.,
ps
komento kertoo:
- PID: prosessin prosessitunnus. Jokaisessa prosessissa on yksilöllinen tunniste.
- TTY: pseudo-teletyyppi (pääteikkuna), josta prosessi toteutettiin.
- STAT: the status of the process.
- aika: prosessin kuluttaman SUORITINAJAN määrä.
- komento: komento, joka käynnisti prosessin.
nämä ovat STAT-palstan yhteiset arvot:
- d: univaikeudet. Prosessi on odotustilassa, yleensä odottamassa syöttöä tai ulostuloa, eikä sitä voida keskeyttää.,
- I: Idle.
- R: Running.
- S: Keskeytyvä Uni.
- T: pysähtyi työnohjaussignaaliin.
- Z: A zombie process. Prosessi on lopetettu, mutta sen vanhempainprosessi ei ole ”siivonnut”.
STAT-sarakkeen arvoa voi seurata jokin näistä lisäindikaattoreista:
- <: korkean prioriteetin tehtävä (ei mukava muille prosesseille).
- N: Low-priority (nice to other processes).
- L: prosessissa on sivuja, jotka on lukittu muistiin (tyypillisesti reaaliaikaisten prosessien avulla).,
- s: sessiojohtaja. Session leader on prosessi, joka on käynnistänyt prosessiryhmiä. Kuori on istuntojohtaja.
- l: multi-thread process.
- +: etualaprosessi.
– Voimme nähdä, että Bash on tilassa Ss
. Kohokoukku ” S ” kertoo, että Bashin kuori nukkuu, ja se on keskeytettävissä. Heti kun tarvitsemme sitä, se vastaa. Lowercase ” s ” kertoo, että kuori on istuntojohtaja.
ping-komennon tila on T
., Tämä kertoo, että ping
on pysäytetty työnohjaussignaalilla. Tässä esimerkissä Ctrl+Z
laitoimme sen taustalle.
ps T
komento on tilassa R
, joka on käynnissä. +
osoittaa, että tämä prosessi on jäsenenä etualalla ryhmä. Etualalla kulkee siis ps T
– komento.
bg-Komennon
bg
komennolla jatkaa taustalla prosessi., Sitä voidaan käyttää työnumeron kanssa tai ilman. Jos käytät sitä ilman työnumeroa, oletustyö tuodaan etualalle. Prosessi kulkee edelleen taustalla. Et voi lähettää siihen mitään tietoa.
Jos annamme bg
komento, jatkamme ping
komento:
bg
ping
ping
komento jatkuu ja näemme vierityksen ulostulon pääteikkunassa vielä kerran. Sinulle näytetään uudelleen käynnistetyn komennon nimi., Tämä korostuu kuvakaappauksessa.
mutta meillä on ongelma. Tehtävä kulkee taustalla eikä hyväksy syöttöä. Miten pysäytämme sen? Ctrl+C
ei tee mitään. Voimme nähdä sen, kun kirjoitamme sen, mutta taustatehtävä ei saa niitä näppäilyjä, joten se pitää hilpeästi poissa.
itse asiassa olemme nyt oudossa sekoitustilassa. Voimme kirjoittaa pääteikkunaan, mutta sen, mitä kirjoitamme, pyyhkii nopeasti pois ping
– komennon vierityslähtö. Kaikki, mitä kirjoitamme, tulee voimaan.,
lopettaaksemme taustatehtävämme meidän on tuotava se etualalle ja pysäytettävä se.
fg-komento
fg
– komento tuo taustatehtävän etualalle. Kuten bg
– komennossa, sitä voidaan käyttää työnumeron kanssa tai ilman. Sen käyttäminen työnumerolla tarkoittaa, että se toimii tietyssä työssä. Jos sitä käytetään ilman työnumeroa, käytetään viimeistä komentoa, joka lähetettiin taustalle.
jos kirjoitamme fg
meidän ping
komento tuodaan etualalle., Kirjoittamamme merkit sekoitetaan ping
– komennon ulostuloon, mutta komentotulkki operoi niitä ikään kuin ne olisi syötetty komentoriville tavalliseen tapaan. Ja itse asiassa Bash Shellin näkökulmasta juuri näin on tapahtunut.
fg
Ja nyt kun meillä on ping
komento käynnissä etualalla vielä kerran, voimme käyttää Ctrl+C
sen tappamiseen.
Ctrl+C
Meidän Täytyy Lähettää oikeita Signaaleja
Se ei ollut kovin kaunis., Ilmeisesti käynnissä prosessi taustalla toimii parhaiten, kun prosessi ei tuota tuotosta eikä vaadi panosta.
mutta, sotkuinen tai ei, esimerkkimme sai aikaan:
- prosessin taustalle.
- prosessin palauttaminen juoksevaan tilaan taustalla.
- prosessin palauttaminen etualalle.
- lopettaa prosessin.
Kun käytät Ctrl+C
ja Ctrl+Z
, olet lähettää signaaleja prosessi. Nämä ovat pikakirjoitustapoja kill
– komennon käyttämiseksi., On 64 erilaista signaalia, joita kill
voi lähettää. Käytäkill -l
komentorivillä luetteloidaksesi ne. kill
ei ole ainoa näiden signaalien lähde. Jotkut niistä nostetaan automaattisesti muiden prosessien järjestelmän
tässä on joitakin yleisesti käytettyjä.
- SIGHUP: signaali 1. Automaattisesti lähetetään prosessiin, kun terminaali, jossa se on käynnissä, on suljettu.
- SIGINT: Signal 2. Lähetetään prosessiin, johon osut
Ctrl+C
. Prosessi keskeytyy ja sitä käsketään lopettamaan., - SIGQUIT: Signal 3. Lähetetään prosessiin, Jos käyttäjä lähettää lopetussignaalin
Ctrl+D
. - SIGKILL: Signal 9. Prosessi tapetaan välittömästi, eikä sitä yritetä sulkea puhtaasti. Prosessi ei suju sulavasti.
- SIGTERM: signaali 15. Tämä on oletussignaali, jonka lähettää
kill
. Se on normaali ohjelman päättymissignaali. - SIGTSTP: Signal 20. Lähetetään prosessiin, kun käytät
Ctrl+Z
. Se pysäyttää prosessin ja laittaa sen taka-alalle.,
meidän on käytettävä kill
– käskyä antaaksemme signaaleja, joilla ei ole niille osoitettuja näppäinyhdistelmiä.
lisää työnohjausta
taustalla siirretty prosessi Ctrl+Z
sijoitetaan pysäytettyyn tilaan. Meidän on käytettävä bg
– komentoa käynnistääksemme sen uudelleen. Ohjelman käynnistäminen käynnissä olevana taustaprosessina on yksinkertaista. Append an ampersand &
komentorivin loppuun.,
vaikka on parasta, että taustaprosessit eivät kirjoita pääteikkunaan, aiomme käyttää esimerkkejä, jotka tekevät. Kuvakaappauksissa pitää olla jotain, mihin voimme viitata. Tämä komento käynnistää päättymättömän silmukan taustaprosessina:
vaikka totta; do echo ”How-To Geek Loop Process”; sleep 3; done &
meille kerrotaan prosessin työnumero ja prosessitunnus. Työnumeromme on 1 ja prosessitunnus on 1979. Voimme käyttää näitä tunnisteita prosessin ohjaamiseen.,
loputtoman silmukan ulostulo alkaa näkyä pääteikkunassa. Kuten aiemminkin, Voimme käyttää komentoriviä, mutta kaikki antamamme komennot ovat päällekkäisiä silmukan prosessin ulostulon kanssa.
onko
lopeta prosessi voimme käyttää jobs
muistuttaa itseämme, mikä työn numero on, ja sitten käyttää kill
.
jobs
kertoo prosessimme olevan työnumero 1. Käyttääksemme tätä lukua kill
meidän täytyy edeltää sitä prosenttimerkillä %
.,
jobs
kill %1
kill
lähettää SIGTERM
signaalin, signaalin numero 15, prosessiin ja se lopetetaan. Kun Enter-näppäintä painetaan seuraavaksi, näytetään työn tila. Se listaa prosessin ” päättyneeksi.”Jos prosessi ei vastaa kill
komento voit ottaa sitä lovi. Käytä kill
, signaalin numero 9. Laita vain numero 9 väliin kill
komento työnumero.,
kill 9 %1
Asioita Olemme Kattaa
- Ctrl+C: Lähettää
SIGINT
, merkki 2, prosessi—, jos se on hyväksyä tulo—ja kertoo, että se lopettaa. - Ctrl+D: Sends
SISQUIT
, signal 3, to the process—if it is accepting input—and tell it to quit. - Ctrl+Z: lähettää
SIGSTP
, signaali 20, prosessiin ja käskee sen pysähtyä (keskeyttää) ja tulla taustaprosessiksi. - jobs: listaa taustatyöt ja näyttää niiden työnumeron.
- bg job_number: käynnistää taustaprosessin uudelleen., Jos et anna työnumeroa, käytetään viimeistä prosessia, joka muutettiin taustatehtäväksi.
- FG job_number: tuo taustaprosessin etualalle ja käynnistää sen uudelleen. Jos et anna työnumeroa, käytetään viimeistä prosessia, joka muutettiin taustatehtäväksi.
- commandline &: lisäämällä ampersand
&
komentorivin loppuun suorittaa kyseisen komennon taustatehtäväksi, joka on käynnissä. - tappaa %job_number: Lähettää
SIGTERM
, signaali 15, prosessi lopettaa se., - tappaa 9 %job_number: Lähettää
SIGKILL
, signaali 9, prosessi ja se päättyy äkillisesti.
aiheeseen LIITTYVÄT: Miten Tappaa Prosesseja Linux Terminal
Dave McKay ensin käyttää tietokoneita, kun rei ’ itetty paperi nauha oli muodissa, ja hän on ollut ohjelmointi lähtien. Oltuaan yli 30 vuotta IT-alalla hän on nyt päätoiminen teknologiatoimittaja., Uransa aikana hän on työskennellyt freelance-ohjelmoija, johtaja kansainvälinen ohjelmisto development team, IT-palvelujen projektipäällikkö, ja, viime aikoina, kuten tietosuojavastaavan. Dave on Linux-evankelista ja avoimen lähdekoodin puolestapuhuja.Lue Koko Bio ”