Forutsetninger:
For å utføre trinnene i denne veiledningen trenger du følgende komponenter:
- Et funksjonelt Linux-system. Lære mer om sette opp en Ubuntu VM på VirtualBox .
- Tilgang til en ikke-rootbruker med sudo-tillatelse .
Kjøre prosessene fra terminalen
Når du kjører en kommando, blir prosessene skapt under terminalen. Hvis terminalen er stengt, avsluttes alle tilhørende prosesser automatisk. I visse situasjoner kan det være upraktisk. For eksempel:
- Overveldende mengde utdata og feil/diagnostiske meldinger
- Utilsiktet stenging av terminalen som resulterer i avslutning av potensielt virksomhetskritiske prosesser mv.
For å takle disse problemene er det et par alternativer:
- Kjører prosessene i bakgrunnen
- Koble prosessene fra terminalen
Prosessene som kjører i bakgrunnen vil ikke overvelde terminalutgangen. Dessuten er terminalen fri til å kjøre tilleggskommandoene. For løsrevne prosesser vil de ikke avsluttes selv om terminalen er stengt.
Starte prosessene i bakgrunnen
I mange tilfeller kan en kommando ta ganske lang tid å fullføre. Vanligvis blir brukeren tvunget til å vente til kommandoen er ferdig. For eksempel, når du bruker et tekstredigeringsprogram, er skallet utilgjengelig før redigeringsprogrammet er lukket.
For å demonstrere bruker vi 'yes'-kommandoen:
$ Mann ja
Metode 1:
Det er et par måter vi kan sende den kjørende prosessen til bakgrunnen.
Først stopper vi prosessen uten å avslutte den. For å gjøre det, kjør følgende kommando og trykk 'Ctrl + Z':
$ ja 'Hei Verden' > / dev / null
Kjør nå kommandoen 'bg' for å sende prosessen i bakgrunnen:
$ bg
Når den er presset i bakgrunnen, fortsetter prosessen. Følgende kommando viser alle de kjørende jobbene i bakgrunnen:
$ arbeidsplasser
Metode 2:
I den forrige metoden begynte prosessen først å kjøre i forgrunnen. Vi stoppet prosessen midlertidig, sendte den til bakgrunnen og gjenopptok den. I stedet kan vi kjøre prosessen direkte i bakgrunnen.
For å gjøre det, legg til '&'-tegnet på slutten av kommandoen:
$ ja 'å lenge johnson' > / dev / null &
Her kjører de skapte prosessene automatisk i bakgrunnen. For å bekrefte, sjekk listen over bakgrunnsjobber:
$ arbeidsplasser
Metode 3:
Vi kan også starte prosessene i bakgrunnen ved hjelp av tmux , en kraftig multiplekser som kan administrere flere terminaløkter i ett enkelt vindu. Det kommer ikke forhåndsinstallert i Linux. Imidlertid er den tilgjengelig for alle de store Linux-distroene. Lære mer om tmux-installasjon på Linux .
I følgende eksempel bruker vi tmux til å pinge et mål og logge utdataene:
$ tmux ny -d 'ping -c 9 127.0.0.1 > ping.log'
Loggfilen bekrefter om kommandoen kjører vellykket eller ikke:
$ katt ping.log
Det er bare ett eksempel på hva tmux kan gjøre. Lære mer om tmux med eksempler .
Setter jobbene tilbake i forgrunnen
Hvis du ønsker å sette en jobb tilbake i forgrunnen, bruker vi kommandoen 'fg'. Vi trenger også jobbnummeret fra jobbkommandoen.
Bestem først jobben du vil bringe i forgrunnen:
$ arbeidsplasser
Bruk nå 'fg' kommandoen:
$ fg %< Jobbnummer >
Koble prosessene fra terminalen
Enhver prosess knyttet til en terminal avsluttes når terminalen lukkes, enten den kjører i forgrunnen eller i bakgrunnen. For å unngå prosessavslutningen, fjerner vi målprosessen fra terminalen/skallet.
Metode 1:
For å fornekte en prosess, trenger vi først en bakgrunnsprosess:
$ ja 'qwerty' > / dev / null &
Sjekk listen over kjørende bakgrunnsjobber:
$ arbeidsplasser
Legg merke til serienummeret til målbakgrunnsjobben. Bruk nå kommandoen 'disown' for å koble den fra terminalen:
$ fornekte %< Jobbnummer >
Måljobben skal nå forsvinne fra jobblisten:
$ arbeidsplasser
Du kan imidlertid fortsatt se prosessen kjører i bakgrunnen:
$ ps til
Metode 2:
En annen måte å koble en prosess fra den overordnede terminalen på er å bruke 'nohup'-kommandoen. Det holder en prosess kjørende i bakgrunnen selv etter at terminalen er stengt.
Bruken av 'nohup' er som følger:
$ nohup < kommando > &
Bekreft om jobben er opprettet:
$ arbeidsplasser
Metode 3:
Denne metoden løsner målprosessen fullstendig. Det er en mer effektiv måte å koble fra GUI-appene.
For eksempel, for å starte Firefox og koble den helt fra terminalen, bruk følgende kommando:
$ firefox dev / null &>/ dev / null &Her:
- De /dev/null er en spesiell enhet i Linux som kvitter seg med all data som er skrevet til den.
- I forrige kommando blir inngangen lest fra og utgangen sendt til /dev/null . Lær mer om andre måter å bruke /dev/null .
Konklusjon
Vi demonstrerte de ulike måtene å kjøre en prosess på i bakgrunnen. Vi viste også frem måtene å koble en prosess fra den overordnede terminalen på. Disse teknikkene kan være nyttige når du arbeider med terminalen eller kjører et skript .
Hvis du trenger å kjøre visse kommandoer i et spesifikt mønster, kan vi laste det ned som en systemd tjeneste . For eksterne maskiner kan vi også bruke tredjepartsverktøy som Kan automatisere nesten alt .
Lykke til med databehandling!