Hvordan du skal Kjøre og Kontroll Bakgrunn Prosesser på Linux

  • Dave McKay

    @TheGurkha

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

Bruk Bash shell i Linux for å administrere forgrunnen og bakgrunnen prosesser. Du kan bruke Bash jobb-kontroll funksjoner og signaler for å gi deg mer fleksibilitet i hvordan du kjøre kommandoer. Vi viser deg hvordan.

Alt Om Prosesser

Når et program er utført i en Linux-eller Unix-lignende operativsystem, en prosess er i gang., «Prosessen» er navnet på den interne representasjon av gjennomføring av programmet i datamaskinens minne. Det er en prosess for hver aktive programmet. Faktisk, det er en prosess for nesten alt som kjører på datamaskinen. Det inkluderer komponenter av grafisk skrivebordsmiljø (GDE) slik som GNOME eller KDE, og systemet daemoner som er lansert på start-up.

Grunnen til at nesten alt som er i gang? Vel, Bash innebygde moduler for eksempel cd, pwd, og alias trenger ikke å ha en prosess som er lansert (eller «lekte») når de kjører., Bash utfører disse kommandoene i forekomst av Bash shell som kjører i terminalvinduet. Disse kommandoene er rask, nettopp fordi de ikke trenger å ha en prosess som ble lansert for dem å utføre. (Du kan skrive inn help i et terminal-vindu for å se listen over Bash innebygde moduler.)

Annonsering

Prosesser kan kjøres i forgrunnen, hvor de i så fall ta over din pc før de har fullført, eller de kan kjøres i bakgrunnen., Prosesser som kjører i bakgrunn ikke dominere terminal-vinduet, og du kan fortsette å arbeide i det. Eller i det minste, at de ikke dominerer terminal-vinduet hvis de ikke genererer tv-utgang.

En Rotete Eksempel

Vi vil starte en enkel ping spore kjører. Vi kommer til å ping Hvordan Å Nerde-domene. Dette vil utføre som en forgrunnen prosessen.

ping www.howtogeek.com

Vi får de forventede resultater, bla nedover terminal-vinduet. Vi kan ikke gjøre noe annet i terminal-vinduet mens ping kjører., For å avslutte kommando trykk Ctrl+C.

Ctrl+C

Den synlige effekten av Ctrl+C er markert i skjermbildet. ping gir en kort oppsummering, og så stopper.

Annonsering

La oss gjenta det. Men denne gangen vi traff Ctrl+Z i stedet for Ctrl+C. Oppgaven vil ikke være avsluttet. Det vil bli en bakgrunn for oppgaven. Vi får kontroll av terminal-vinduet vendte tilbake til oss.,

ping www.howtogeek.com
Ctrl+Z

Den synlige effekten av å treffe Ctrl+Z er markert i skjermbildet.

Denne gangen blir vi fortalt prosessen er stoppet. Stoppet betyr ikke avsluttet. Det er som en bil ved et stoppskilt. Vi har ikke fjernet den og kastet den bort. Det er fortsatt på veien, stille, venter på å gå. Prosessen er nå en bakgrunn jobben.

jobs – kommandoen liste over de jobbene som har blitt startet i nåværende terminal-økten., Og fordi jobber (uunngåelig) prosesser, kan vi også bruke ps – kommandoen for å se dem. La oss bruke både kommandoer og sammenligne sine utganger. Vi vil bruke T alternativ (terminal) muligheten til å bare liste opp de prosesser som kjører i denne terminal-vinduet. Merk at det er ingen grunn til å bruke bindestrek - med T alternativ.

jobs
ps T

jobs – kommandoen forteller oss:

  • : tall i hakeparentes er jobb nr., Vi kan bruke dette til å se jobben når vi har behov for å kontrollere det med jobben kontroll kommandoer.
  • +: plusstegnet + viser at dette er en jobb som vil bli påvirket hvis vi bruker en jobb kommando uten en bestemt jobb nr. Det kalles standard jobben. Standard jobben er det alltid mest nylig lagt til listen over jobber.
  • Stoppet: prosessen er i gang.
  • ping www.howtogeek.com: kommandolinjen at lansert prosessen.,

ps – kommandoen forteller oss:

  • PID: prosess-ID til prosessen. Hver prosess har en unik ID.
  • TTY: pseudo-teksttelefoner (terminal vindu) at prosessen ble utført fra.
  • STATISTISKE: status for prosessen.
  • TID: hvor mye CPU-tid som forbrukes av prosessen.
  • KOMMANDO: kommandoen som startet den prosessen.

Dette er felles verdier for STAT kolonne:

  • D: Uavbrutt søvn. Prosessen er i en venter, vanligvis venter på inndata eller utdata, og kan ikke avbrytes.,
  • jeg: Inaktiv.
  • R: Kjører.
  • S: Interruptible søvn.
  • T: Stoppet av en jobb styresignal.
  • Z: En zombie prosessen. Prosessen har blitt avsluttet, men har ikke blitt «vasket ned» av den overordnede prosessen.
Annonsering

verdien i den STATISTISKE kolonnen kan bli etterfulgt av en av disse ekstra indikatorer:

  • <: Høyt prioritert oppgave (ikke fint til andre prosesser).
  • N: Lav prioritet (fin til andre prosesser).
  • L: prosessen har sider låst inn i minnet (typisk brukt ved real-time prosesser).,
  • s: En økt, leder. En økt lederen er en prosess som har startet prosessen grupper. Et skall er en økt leder.
  • l: Multi-tråd prosessen.
  • +: En forgrunnen prosessen.

Vi kan se at Bash har en tilstand av Ss. Den store «S» fortell oss Bash shell er å sove, og det er interruptible. Så snart vi trenger det, vil det reagere. De små «s» forteller oss at skallet er en økt leder.

ping-kommandoen har en tilstand av T., Dette forteller oss at ping har blitt stoppet av en jobb styresignal. I dette eksempelet, som var Ctrl+Z vi brukt til å sette det inn i bakgrunnen.

ps T – kommandoen har en tilstand av R, som står for driften. + angir at denne prosessen er medlem av forgrunnen gruppe. Så ps T kommando kjører i forgrunnen.

bg Kommandoen

bg – kommandoen brukes til å gjenoppta en bakgrunnsprosess., Den kan brukes med eller uten en jobb nummer. Hvis du bruker det uten en jobb nummer standard jobben er brakt i forgrunnen. Prosessen fortsatt kjører i bakgrunnen. Du kan ikke sende noen innspill til det.

Annonsering

Hvis vi utsteder bg – kommandoen, vil vi fortsette vår ping kommando:

bg

ping kommando fortsetter, og vi ser at det å rulle ut i terminal-vinduet nok en gang. Navnet på kommandoen som har blitt startet på nytt vises for deg., Dette er markert i skjermbildet.

Men vi har et problem. Oppgaven kjører i bakgrunnen og vil ikke godta inndata. Så hvordan skal vi stoppe det? Ctrl+C ikke gjør noe. Vi kan se det når vi skriver det, men bakgrunnen oppgave ikke motta disse tastetrykk så det holder å pinge gårde unna.

Annonsering

faktisk, vi er nå i en merkelig blandet modus. Vi kan skrive i terminal-vinduet, men det vi skriver er raskt feid bort av bla utdataene fra ping – kommandoen. Noe vi skriver trer i kraft i foregound.,

for Å stoppe bakgrunnen vår oppgave vi trenger å få det til forgrunnen, og så stoppe den.

fg-Kommandoen

fg – kommandoen vil gi en bakgrunn for oppgaven i forgrunnen. Akkurat som bg – kommandoen, kan den brukes med eller uten en jobb nummer. Ved å bruke det med en jobb nummer betyr at den vil operere på en spesifikk jobb. Hvis det er brukt uten en jobb nummer den siste kommando som ble sendt til den bakgrunn er brukt.

Hvis vi skriver fg vår ping – kommandoen vil bli brakt i forgrunnen., De tegn vi skriver er blandet opp med utdataene fra ping – kommandoen, men de er operert av skallet som om de hadde vært inn på kommando linje som vanlig. Og faktisk, fra Bash shell ‘ s point of view, som er nøyaktig hva som har skjedd.

fg
Annonsering

Og nå som vi har ping – kommandoen kjøres i forgrunnen igjen, kan vi bruke Ctrl+C for å drepe det.

Ctrl+C

Vi Trenger for å Sende de Riktige Signaler

Det var ikke akkurat pen., Tydeligvis å kjøre en prosess i bakgrunnen fungerer best når prosessen produserer ikke-utgang og krever ikke at du innspill.

Men, rotete eller ikke, vårt eksempel gjorde oppnå:

  • for å Sette en prosess i bakgrunnen.
  • Gjenoppretting av prosessen til en løpende tilstand i bakgrunnen.
  • Tilbake prosessen i forgrunnen.
  • for å Avslutte prosessen.

Når du bruker Ctrl+C og Ctrl+Z du sender signaler til prosessen. Dette er en forkortelse måter å bruke kill – kommandoen., Det er 64 forskjellige signaler som kill kan sende. Bruk kill -l på kommandolinjen til å liste dem. kill er ikke den eneste kilden til disse signalene. Noen av dem er hevet automatisk ved andre prosesser i systemet

Her er noen av de vanligste seg.

  • SIGHUP: Signal 1. Automatisk sendt til en prosess når terminalen er det kjører i er lukket.
  • SIGINT: Signal 2. Sendt til en prosess du treffer Ctrl+C. Prosessen blir avbrutt, og beskjed om å avslutte.,
  • SIGQUIT: Signal 3. Sendt til en prosess hvis brukeren sender en slutte signal Ctrl+D.
  • SIGKILL: Signal 9. Prosessen er umiddelbart drepte og vil ikke forsøke å lukke ned på riktig måte. Prosessen ikke går ned på en elegant måte.
  • SIGTERM: Signal 15. Dette er standard-signal som sendes av kill. Det er standard program oppsigelse signal.
  • SIGTSTP: Signal 20. Sendt til en prosess, når du bruker Ctrl+Z. Det stopper prosessen, og setter det i bakgrunnen.,

– Vi må bruke kill – kommandoen til å gi signaler som ikke har tastekombinasjoner som er tilordnet til dem.

Videre-Jobb-Kontroll

En prosess flyttet inn i bakgrunnen ved å bruke Ctrl+Z er plassert i stoppet tilstand. Vi er nødt til å bruke bg kommando for å starte den i gang igjen. For å starte et program som kjører i bakgrunnen prosessen er enkel. Legg til en tegnet & til slutten av kommandolinjen.,

Annonsering

Selv om det er best at bakgrunnen prosesser ikke skrive til terminal-vinduet, vi kommer til å bruke eksempler som gjør det. Vi trenger å ha noe i skjermbilder som vi kan referere til. Denne kommandoen vil starte en endeløs loop som en bakgrunnsprosess:

mens sann; do echo «Hvordan-Å Nerde-Loop-Prosessen»; sove 3; gjort &

Vi er fortalt at jobb nummer og prosess-ID id-en til den prosessen. Vår jobb nummer 1, og prosess-id-er fra 1979. Vi kan bruke disse identifikatorer for å styre prosessen.,

Annonsering

output fra våre endeløs loop begynner å vises i terminal-vinduet. Som før, kan vi bruke kommandoen line men noen kommandoer vi problemet er blandet med utgang fra loop-prosessen.

ls

for Å stoppe prosessen vår, kan vi bruke jobs for å minne oss selv om hva jobben er, og så bruke kill.

jobs rapporter om at vår prosess er jobb nummer 1. For å bruke det tallet med kill vi må gå forut for det med et prosenttegn %.,

jobs
kill %1

kill sender SIGTERM signal signal nummer 15, til prosessen, og det er avsluttet. Når Enter-tasten er next inne for, en status for jobben vises. Det viser prosessen som «avsluttet.»Hvis prosessen ikke svarer til kill – kommandoen kan du ta den opp et hakk. Bruk kill med SIGKILL , signal nummer 9. Bare sette nummer 9 mellom kill – kommandoen jobb nr.,

kill 9 %1

Ting Vi har Dekket

  • Ctrl+C: Sender SIGINT, signal 2, til prosessen—om det er å akseptere inngang—og forteller det til å stanse.
  • Ctrl+D: Sender SISQUIT, signal 3, til prosessen—om det er å akseptere inngang—og forteller det til å slutte.
  • Ctrl+Z: Sender SIGSTP, signal-20, til prosessen, og forteller det til stopp (sperre) og bli en bakgrunnsprosess.
  • jobs: Viser bakgrunnen jobber og viser sin jobb nr.
  • bg job_number: Starter en bakgrunnsprosess., Hvis du ikke oppgir en jobb nummer den siste prosessen som ble omgjort til en bakgrunn for oppgaven er brukt.
  • fg job_number: bringer en bakgrunnsprosess i forgrunnen og starter det. Hvis du ikke oppgir en jobb nummer den siste prosessen som ble omgjort til en bakgrunn for oppgaven er brukt.
  • commandline &: du kan Legge til et-tegnet & til slutten av en kommandolinje som utfører kommandoen som en bakgrunn for oppgaven, som er å kjøre.
  • drepe %job_number: Sender SIGTERM, signal-15, til prosessen for å si det på.,
  • drepe 9 %job_number: Sender SIGKILL, signal 9, til prosessen, og avslutter den brått.

i SLEKT: Hvordan å Drepe Prosesser Fra Linux Terminal

Dave McKay
Dave McKay først brukt datamaskiner når hullet papir tape som var på moten, og han har vært programmering siden den gang. Etter over 30 år i IT-bransjen, han er nå en full-time-teknologi journalist., I løpet av sin karriere har han jobbet som freelance programmerer, leder av et internasjonalt software utvikling team, en IT-tjenester project manager, og, senest, som en Data Protection Officer. Dave er en Linux-evangelist og åpen kildekode-talsmann.Les Hele Bio «

Leave a Comment