Hvordan til at Køre og Styre Processer på Baggrund Linux

  • Dave McKay

    @TheGurkha

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

Bruge Bash shell i Linux til at styre forgrund og baggrund processer. Du kan bruge Bashs jobkontrolfunktioner og signaler til at give dig mere fleksibilitet i, hvordan du kører kommandoer. Vi viser dig hvordan.

alt om processer

når ET program udføres i et Linu.-eller uni. – lignende operativsystem, startes en proces., “Proces” er navnet på den interne repræsentation af det udførende program i computerens hukommelse. Der er en proces for hvert aktivt program. Faktisk er der en proces for næsten alt, hvad der kører på din computer. Det inkluderer komponenterne i dit grafiske skrivebordsmiljø (GDE), såsom GNOME eller KDE, og systemdemoner, der lanceres ved opstart.

hvorfor næsten alt, hvad der kører? Nå, Bash indbyggede ins som cd, p .d og alias behøver ikke at have en proces lanceret (eller “spa .ned”), når de køres., Bash udfører disse kommandoer inden for forekomsten af Bash-skallen, der kører i dit terminalvindue. Disse kommandoer er hurtige netop fordi de ikke behøver at have en proces lanceret for dem at udføre. (Du kan skrive help i et terminalvindue for at se listen over Bash-indbyggede ins.)

annonce

processer kan køre i forgrunden, i hvilket tilfælde de overtager din terminal, indtil de er færdige, eller de kan køres i baggrunden., Processer, der kører i baggrunden, dominerer ikke terminalvinduet, og du kan fortsætte med at arbejde i det. Eller i det mindste dominerer de ikke terminalvinduet, hvis de ikke genererer skærmudgang.

et rodet eksempel

Vi starter en simpel ping spor kører. Vi vil ping Ho. – To Geek-domænet. Dette vil udføre som en forgrundsproces.

ping www.howtogeek.com

Vi får de forventede resultater ved at rulle ned i terminalvinduet. Vi kan ikke gøre noget andet i terminalvinduet, mens ping kører., For at afslutte kommandoen hit Ctrl+C.

Ctrl+C

den synlige effekt af Ctrl+C fremhæves i skærmbilledet. ping giver en kort oversigt og stopper derefter.

annonce

lad os gentage det. Men denne gang rammer vi Ctrl+Z i stedet for Ctrl+C. Opgaven vil ikke blive afsluttet. Det bliver en baggrundsopgave. Vi får kontrol over terminalvinduet returneret til os.,

ping www.howtogeek.com
Ctrl+Z

Den synlige effekt af at ramme Ctrl+Z er fremhævet på skærmbilledet.

denne gang får vi at vide, at processen er stoppet. Stoppet betyder ikke afsluttet. Det er som en bil ved et stopskilt. Vi har ikke skrottet det og smidt det væk. Det er stadig på vej, stationært og venter på at gå. Processen er nu et baggrundsjob.

kommandoenjobs viser de job, der er startet i den aktuelle terminalsession., Og fordi job er (uundgåeligt) processer, kan vi også bruge kommandoen ps for at se dem. Lad os bruge begge kommandoer og sammenligne deres output. Vi bruger indstillingen T (terminal) til kun at liste de processer, der kører i dette terminalvindue. Bemærk, at der ikke er behov for at bruge en bindestreg - med indstillingen T.

jobs
ps T

jobs kommando, der fortæller os:

  • : tallet i parentes er antal job., Vi kan bruge dette til at henvise til jobbet, når vi har brug for at kontrollere det med jobkontrolkommandoer.
  • +: plustegnet + viser, at dette er det job, der vil blive handlet, hvis vi bruger en jobkontrolkommando uden et specifikt jobnummer. Det kaldes standardjobbet. Standardjobbet er altid det Senest føjede til listen over job.
  • stoppet: processen kører ikke.
  • ping www.howtogeek.com: kommandolinjen, der lancerede processen.,

kommandoenps fortæller os:

  • PID: proces-ID for processen. Hver proces har et unikt ID.
  • TTY: den pseudo-teletype (terminalvindue), som processen blev udført fra.
  • STAT: status for processen.
  • tid: mængden af CPU-tid, der forbruges af processen.
  • kommando: den kommando, der lancerede processen.

disse er almindelige værdier for STAT-kolonnen:

  • D: uafbrydelig søvn. Processen er i ventetilstand, som normalt venter på input eller output, og kan ikke afbrydes.,
  • i: tomgang.
  • R: kører.
  • s: afbrydelig søvn.
  • T: stoppet af et jobkontrolsignal.
  • Z: En processombieproces. Processen er afsluttet, men er ikke blevet “renset” af sin overordnede proces.
annonce

værdien i STAT-kolonnen kan efterfølges af en af disse ekstra indikatorer:

  • <: højt prioriteret opgave (ikke rart for andre processer).
  • n: Lav prioritet (nice til andre processer).
  • L: proces har sider låst i hukommelsen (typisk brugt af realtidsprocesser).,
  • s: en session leder. En session leder er en proces, der har lanceret procesgrupper. En skal er en session leder.
  • l: Multi-tråd proces.
  • +: en forgrundsproces.

Vi kan se, at Bash har en tilstand af Ss. De store bogstaver ” S ” fortæller os, at Bash shell sover, og det er afbrydeligt. Så snart vi har brug for det, vil det reagere. De små bogstaver ” S ” fortæller os, at skallen er en sessionsleder.

ping-kommandoen har en tilstand af T., Dette fortæller os, at ping er blevet stoppet af et jobkontrolsignal. I dette eksempel var det Ctrl+Z vi plejede at sætte det i baggrunden.

ps T kommandoen har en tilstand afR, som står for at køre. + angiver, at denne proces er medlem af forgrundsgruppen. Så kommandoenps T kører i forgrunden.

kommandoen bg

kommandoenbg bruges til at genoptage en baggrundsproces., Det kan bruges med eller uden et jobnummer. Hvis du bruger det uden et jobnummer, bringes standardjobbet til forgrunden. Processen kører stadig i baggrunden. Du kan ikke sende noget input til det.

Reklame

Hvis vi udstede bg kommando, vil vi genoptage vores ping kommando:

bg

ping kommando igen og vi ser rulle output i terminal-vindue, når mere. Navnet på den kommando, der er genstartet, vises for dig., Dette fremhæves på skærmbilledet.

men vi har et problem. Opgaven kører i baggrunden og accepterer ikke input. Så hvordan stopper vi det? Ctrl+C gør ikke noget. Vi kan se det, når vi skriver det, men baggrundsopgaven modtager ikke disse tastetryk, så det fortsætter med at pinge lystigt væk.

annonce

faktisk er vi nu i en mærkelig blandet tilstand. Vi kan skrive i terminalvinduet, men det, vi skriver, fejes hurtigt væk af rulleudgangen fra kommandoen ping. Alt, hvad vi skriver, træder i kraft i forgrunden.,

for at stoppe vores baggrundsopgave skal vi bringe den til forgrunden og derefter stoppe den.

FG-kommandoen

fg kommandoen bringer en baggrundsopgave i forgrunden. Ligesom kommandoen bg kan den bruges med eller uden et jobnummer. Brug af det med et jobnummer betyder, at det fungerer på et specifikt job. Hvis det bruges uden et jobnummer, bruges den sidste kommando, der blev sendt til baggrunden.

Hvis vi skriver fg vores ping kommando, vil blive bragt i forgrunden., De tegn, vi skriver, blandes med output fra kommandoen ping, men de betjenes af skallen, som om de var indtastet på kommandolinjen som sædvanligt. Og faktisk, fra Bash shell synspunkt, det er præcis, hvad der er sket.

fg
annonce

og nu hvor vi har kommandoen ping, der kører i forgrunden igen, kan vi bruge Ctrl+C til at dræbe den.

Ctrl+C

vi er nødt til at sende de rigtige signaler

, der ikke var nøjagtigt smuk., Åbenbart kører en proces i baggrunden fungerer bedst, når processen ikke producerer output og ikke kræver input.

men, rodet eller ej, opnåede vores eksempel:

  • at sætte en proces i baggrunden.
  • Gendannelse af processen til en kørende tilstand i baggrunden.
  • vender processen tilbage til forgrunden.
  • afslutning af processen.

Når du bruger Ctrl+C og Ctrl+Z , sender du signaler til processen. Disse er korte måder at bruge kommandoen kill., Der er 64 forskellige signaler, som kill kan sende. Brug kill -l på kommandolinjen for at liste dem. kill er ikke den eneste kilde til disse signaler. Nogle af dem hæves automatisk af andre processer i systemet

Her er nogle af de almindeligt anvendte.

  • SIGHUP: Signal 1. Automatisk sendt til en proces, når terminalen den kører i er lukket.
  • SIGINT: Signal 2. Sendt til en proces, du rammer Ctrl+C. Processen bliver afbrudt og bedt om at afslutte.,
  • sig siguit: Signal 3. Sendes til en proces, hvis brugeren sender et afslutningssignal Ctrl+D.
  • SIGKILL: Signal 9. Processen bliver straks dræbt og vil ikke forsøge at lukke rent. Processen går ikke ned yndefuldt.
  • SIGTERM: signal 15. Dette er standardsignalet sendt af kill. Det er standardprogrammets termineringssignal.
  • SIGTSTP: signal 20. Sendes til en proces, når du bruger Ctrl+Z. Det stopper processen og sætter den i baggrunden.,

Vi skal bruge kommandoenkill til at udstede signaler, der ikke har tastekombinationer tildelt dem.

yderligere jobkontrol

en proces flyttede ind i baggrunden ved at bruge Ctrl+Z placeres i stoppet tilstand. Vi skal bruge kommandoen bg for at starte den igen. At starte et program som en kørende baggrundsproces er enkel. Tilføj en ampersand & til slutningen af kommandolinjen.,

annonce

selvom det er bedst, at baggrundsprocesser ikke skriver til terminalvinduet, vil vi bruge eksempler, der gør det. Vi skal have noget i de skærmbilleder, som vi kan henvise til. Denne kommando starter en endeløs løkke som baggrundsproces:

mens det er sandt; gør ekko “Ho.-To Geek Loop Process”; sleep 3; udført &

Vi får at vide procesens jobnummer og Proces-ID-id. Vores jobnummer er 1, og Proces-id ‘ et er 1979. Vi kan bruge disse identifikatorer til at styre processen.,

annonce

udgangen fra vores endeløse sløjfe begynder at vises i terminalvinduet. Som før kan vi bruge kommandolinjen, men alle kommandoer, vi udsteder, er ispedd output fra sløjfeprocessen.

ls

for At stoppe vores proces, at vi kan bruge jobs for at minde os selv om, hvad jobbet nummer er, og brug derefter kill.

jobs rapporterer, at vores proces er jobnummer 1. For at bruge dette nummer med kill skal vi gå foran det med et procenttegn %.,

jobs
kill %1

kill sender SIGTERM signal signal nummer 15, at den proces, og det er afsluttet. Når du trykker på Enter-tasten næste gang, vises en status for jobbet. Det viser processen som ” afsluttet.”Hvis processen ikke reagerer på kommandoen kill, kan du tage den op et hak. Brug kill med SIGKILL signal nummer 9. Bare sæt nummeret 9 mellem kill kommando jobnummeret.,

kill 9 %1

ting, vi har dækket

  • Ctrl+C: senderSIGINT, signal 2, til processen—hvis den accepterer input—og beder den om at afslutte.
  • Ctrl + D: sender SISQUIT, signal 3, til processen—hvis den accepterer input—og beder den om at afslutte.
  • Ctrl + Ctrl: sender SIGSTP, signal 20, til processen og fortæller den at stoppe (suspendere) og blive en baggrundsproces.
  • job: viser baggrundsjobene og viser deres jobnummer.
  • bg job_number: genstarter en baggrundsproces., Hvis du ikke angiver et jobnummer, bruges den sidste proces, der blev omdannet til en baggrundsopgave.
  • FG job_number: bringer en baggrundsproces i forgrunden og genstarter den. Hvis du ikke angiver et jobnummer, bruges den sidste proces, der blev omdannet til en baggrundsopgave.
  • kommandolinje &: tilføjelse af en ampersand & til slutningen af en kommandolinje udfører denne kommando som en baggrundsopgave, der kører.
  • kill %job_number: sender SIGTERM, signal 15, til processen for at afslutte den.,
  • kill 9 %job_number: sender SIGKILL, signal 9, til processen og afslutter den brat.

RELATERET: Hvordan til at Dræbe Processer Fra Linux Terminal

Dave McKay
Dave McKay første, der anvendes computere, når hullet papir tape var på mode, og han har stået for programmeringen lige siden. Efter over 30 år i IT-branchen er han nu en fuldtids teknologijournalist., I løbet af sin karriere har han arbejdet som freelance-programmør, leder af et internationalt soft .areudviklingsteam, en projektleder for IT-tjenester og senest som databeskyttelsesansvarlig. Dave er en Linu.evangelist og open source fortaler.Læs hele Bio ”

Leave a Comment