Linux

Bash vent kommando

Bash vent kommando

vente er en kommando, der venter på, at de givne job skal fuldføres, og returnerer afslutningsstatus for den ventede på kommando.

Siden den vente kommando påvirker det aktuelle shell-eksekveringsmiljø, det implementeres som en indbygget kommando i de fleste skaller.

I denne artikel udforsker vi den indbyggede Bash vente kommando.

Bash vente Kommando #

Den generelle syntaks for vente indbygget tager følgende form:

vent [option] ID 

ID er proces- eller job-id'et. Hvis nej ID er angivet, venter kommandoen, indtil alle underordnede baggrundsjob er afsluttet.

Det vente kommando returnerer exitstatus for den sidste kommando, du har ventet på.

For eksempel at vente på en baggrundsproces med PID 7654, du ville bruge:

vent 7654

Når der gives flere processer, venter kommandoen på, at alle processer er afsluttet.

Job specificeres ved hjælp af jobspecifikationen (“jobspec”), som er en måde at henvise til de processer, der udgør jobbet. En jobspec starter med et procentsymbol efterfulgt af jobnummeret (% n). Her er et eksempel:

Kør en kommando i en baggrund:

rsync -a / home / tmp / home &

Shell-job-id'et (omgivet af parenteser) og proces-id'et vises på din terminal:

[2] 54377 

For at vente på jobbet skal du køre vente kommando efterfulgt af jobspecifikationen:

vent% 2

Når påberåbt sig med -n valgmulighed, venter kommandoen kun på et enkelt job fra de givne pids eller jobspecs til at fuldføre og returnerer sin exitstatus. Hvis der ikke gives argumenter, vent -n venter på, at ethvert baggrundsjob skal fuldføre og returnere jobafslutningsstatus.

vent -n 45432 54346 76573

I eksemplet ovenfor, vent -n udskriver kun returstatus for det job, der afsluttes først; det viser ikke PID for jobbet. Hvis du vil hente job-pid eller jobspec, som exit-status returneres for, skal du bruge -s mulighed for at tildele den til en variabel:

vent -p job_id -n 45432 54346 76573

-s option blev introduceret i Bash 5.1. Hvis du bruger en ældre Bash-version, får du en fejl "ugyldig mulighed".

Det -f indstilling fortæller vente at vente på, at hver pid eller jobspecifikation faktisk ophører, før den returnerer sin exitkode, snarere end at vende tilbage, når jobstatus ændres. Denne indstilling er kun gyldig, når jobkontrol er aktiveret. Jobkontrol er som standard kun aktiveret for interaktive meddelelser.

Eksempler #

vente bruges typisk i shell-scripts, der gyder børns processer, der udføres parallelt.

For at illustrere, hvordan kommandoen fungerer, skal du oprette følgende script:

#!/ bin / bash sleep 30 & process_id = $! ekko "PID: $ process_id" vent $ process_id echo "Afslut status: $?" 

Lad os forklare koden linje for linje:

  1. Den første linje kaldes shebang og fortæller operativsystemet, hvilken tolk der skal bruges til at analysere resten af ​​filen.
  2. Vi bruger søvn kommando til at efterligne en tidskrævende baggrundsproces.
  3. $! er en intern Bash-variabel, der gemmer PID for det sidste job, der køres i baggrunden. I dette eksempel er det PID for søvn kommando. Vi lagrer PID i en variabel (proces_id).
  4. Udskriver PID-nummeret.
  5. PID sendes til vente kommando, der venter til søvn kommandoen fuldføres.
  6. Udskriver exitstatus for vente kommando. $? er en intern Bash-variabel, der indeholder exit-status for den sidste kommando, der blev udført.

Hvis du kører scriptet, udskrives det sådan:

PID: 36353 Udgangsstatus: 0 

Her et eksempel ved hjælp af -n mulighed:

#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Første job afsluttet."vent ekko" Alle job er afsluttet." 

Når scriptet udføres, giver det 3 baggrundsprocesser. vent -n venter, indtil det første job er afsluttet, og ekkoerklæringen udskrives. vente venter på, at alle børnebaggrundsjob skal udføres.

første job afsluttet alle job afsluttet 

Det sidste eksempel forklarer -f mulighed. Åbn terminalen og kør:

sove 3600 &
[1] 46671 

Vent på processen:

vent 46671

Åbn en anden terminal, og stop processen med dræbe kommando:

dræb -STOP 46671

Når processtatus er ændret, vises vente kommandoen fuldfører og returnerer procesafslutningskoden.

Gentag nu de samme trin, men brug denne gang vent -f $ pid:

sove 3600 &vent -f 46671

Stop processen fra den anden terminal:

dræb -STOP 46671

Denne gang vente kommandoen afsluttes ikke. Det løber indtil søvn processen afsluttes.

Konklusion #

Det vente kommandoen venter på, at de angivne job er afsluttet, og returnerer jobkodens udgangskode.

Hvis du har spørgsmål eller feedback, er du velkommen til at efterlade en kommentar.

Mus AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
Tabletbrugere savner ofte musemarkøren, især når de er vante til at bruge bærbare computere. Touchscreen-smartphones og tablets har mange fordele, og ...
Mus Midterste museknap fungerer ikke i Windows 10
Midterste museknap fungerer ikke i Windows 10
Det midterste museknap hjælper dig med at rulle gennem lange websider og skærme med en masse data. Hvis det stopper, vil du ende med at bruge tastatur...
Mus Sådan ændres venstre og højre museknap på Windows 10-pc
Sådan ændres venstre og højre museknap på Windows 10-pc
Det er en ganske normal, at alle computermusenheder er ergonomisk designet til højrehåndede brugere. Men der er musenheder til rådighed, der er specie...