Android

Sådan køres Linux-kommandoer i baggrunden

Writing 2D Games in C using SDL by Thomas Lively

Writing 2D Games in C using SDL by Thomas Lively

Indholdsfortegnelse:

Anonim

Når du kører en kommando i terminalen, skal du typisk vente til kommandoen er afsluttet, før du kan indtaste en anden. Dette kaldes at køre kommandoen i forgrunds- eller forgrundsprocessen. Når en proces kører i forgrunden, optager den din skal, og du kan interagere med den ved hjælp af inputenhederne.

Hvad hvis det tager lang tid at færdiggøre kommandoen, og du vil køre andre kommandoer i mellemtiden? Du har flere muligheder til din rådighed. Den mest indlysende og ligefremme mulighed er at starte en ny shell-session og køre kommandoen i den. En anden mulighed er at køre kommandoen i baggrunden.

En baggrundsproces er en proces / kommando, der startes fra en terminal og kører i baggrunden uden interaktion fra brugeren., vil vi tale om baggrundsprocesserne er Linux. Vi viser dig, hvordan du starter en kommando i baggrunden, og hvordan du fortsætter processen, når shell-sessionen er lukket.

Kør en Linux-kommando i baggrunden

For at køre en kommando i baggrunden skal du tilføje ampersand-symbolet ( & ) i slutningen af ​​kommandoen:

command &

Shell-job-ID (omgivet af parenteser) og proces-id udskrives på terminalen:

25177

Du kan have flere processer, der kører i baggrunden på samme tid.

Baggrundsprocessen fortsætter med at skrive beskeder til terminalen, hvorfra du påkaldte kommandoen. For at undertrykke stdout og stderr meddelelser skal du bruge følgende syntaks:

command > /dev/null 2>&1 &

>/dev/null 2>&1 betyder omdirigering af stdout til /dev/null og stderr til stdout .

Brug jobværktøjet til at vise status for alle stoppede og baggrundsjob i den aktuelle shell-session:

jobs -l

Outputet inkluderer jobnummeret, proces-id, jobtilstand og den kommando, der startede jobbet:

+ 25177 Running ping google.com &

For at bringe en baggrundsproces i forgrunden skal du bruge kommandoen fg :

fg

fg %1

For at afslutte baggrundsprocessen skal du bruge kill kommandoen efterfulgt af proces-ID:

kill -9 25177

Flyt en forgrundsproces til baggrunden

Sådan flyttes en kørende forgrundsproces i baggrunden:

  1. Stop processen ved at skrive Ctrl+Z Flyt den stoppede proces til baggrunden ved at skrive bg .

Hold baggrundsprocesser kørt efter en shell-udgang

Hvis din forbindelse falder, eller du logger ud af shell-sessionen, afsluttes baggrundsprocesserne. Der er flere måder at holde processen i gang efter den interaktive shell-session er afsluttet.

En måde er at fjerne jobbet fra skallets jobkontrol ved hjælp af det disown shell-indbyggede:

disown

disown %1

Bekræft, at jobbet fjernes fra tabellen over aktive job ved hjælp af kommandoen jobs -l . Brug ps aux kommandoen til at liste alle kørende processer, inklusive den ikke-kendte.

En anden måde at holde en proces i gang efter shell-udgangen er at bruge nohup .

nohup kommandoen udfører et andet program, der er specificeret som dets argument, og ignorerer alle SIGHUP (hangup) signaler. SIGHUP er et signal, der sendes til en proces, når dens kontrolterminal er lukket.

Hvis du vil køre en kommando i baggrunden ved hjælp af kommandoen nohup , skal du indtaste:

nohup command &

Kommandoudgangen omdirigeres til filen nohup.out .

nohup: ignoring input and appending output to 'nohup.out'

Alternativer

Der er et antal programmer, der giver dig mulighed for at have flere interaktive sessioner på samme tid.

skærm

Skærm- eller GNU-skærm er et terminalmultiplexerprogram, der giver dig mulighed for at starte en skærmsession og åbne et vilkårligt antal windows (virtuelle terminaler) inde i denne session. Processer, der kører i skærmen, fortsætter med at køre, når deres vindue ikke er synligt, selvom du bliver afbrudt.

tmux

Tmux er et moderne alternativ til GNU-skærm. Med Tmux kan du også oprette en session og åbne flere vinduer inde i denne session. Tmux-sessioner er vedvarende, hvilket betyder, at programmer, der kører i Tmux, fortsætter med at køre, selvom du lukker terminalen.

Konklusion

Hvis du vil køre en kommando i baggrunden, skal du inkludere & i slutningen af ​​kommandoen.

Når du kører en kommando i baggrunden, behøver du ikke vente til den er færdig, før du kan udføre en anden.

nohup fg bg job nægter terminal