Linux

Bash vent kommando

Bash vent kommando

vente er en kommando som venter på at de gitte jobbene skal fullføres, og returnerer avslutningsstatusen til den ventede på kommandoen.

Siden vente kommandoen påvirker det gjeldende miljøet for skallutførelse, den er implementert som en innebygd kommando i de fleste skjell.

I denne artikkelen vil vi utforske den innebygde Bash vente kommando.

Bash vente Kommando #

Den generelle syntaksen til vente innebygd tar følgende form:

vent [alternativ] ID 

ID er prosessen eller jobb-IDen. Hvis nei ID er spesifisert, venter kommandoen til alle bakgrunnsjobber for barn er fullført.

De vente kommandoen returnerer utgangsstatus for den siste kommandoen som ventet.

For eksempel å vente på en bakgrunnsprosess med PID 7654, du vil bruke:

vent 7654

Når flere prosesser er gitt, venter kommandoen på at alle prosesser skal fullføres.

Jobber spesifiseres ved hjelp av jobbspesifikasjonen (“jobspec”), som er en måte å referere til prosessene som utgjør jobben. En jobspec begynner med et prosentsymbol etterfulgt av jobbnummeret (% n). Her er et eksempel:

Kjør en kommando i bakgrunnen:

rsync -a / home / tmp / home &

ID-en for jobbjobben (omgitt av parenteser) og prosess-ID vises på terminalen din:

[2] 54377 

For å vente på jobben, kjør vente kommando etterfulgt av jobbspesifikasjonen:

vent% 2

Når påkalt med -n alternativet, venter kommandoen bare på en enkelt jobb fra de gitte pidsene eller jobspecs å fullføre og returnerer sin avslutningsstatus. Hvis ingen argumenter blir gitt, vent -n venter på at en bakgrunnsjobb skal fullføres og returnere statusen for avslutning av jobben.

vent -n 45432 54346 76573

I eksemplet ovenfor, vent -n skriver bare ut returstatusen til jobben som avsluttes først; det viser ikke PID for jobben. Hvis du vil få jobben pid eller jobspec som utgangsstatusen returneres for, bruker du -s muligheten til å tilordne den til en variabel:

vent -p jobb_id -n 45432 54346 76573

-s alternativet ble introdusert i Bash 5.1. Hvis du bruker en eldre Bash-versjon, får du feilmeldingen "ugyldig alternativ".

De -f alternativet forteller vente å vente på at hver pid eller jobspec faktisk skal avsluttes før du returnerer utgangskoden, i stedet for å returnere når jobbstatusen endres. Dette alternativet er bare gyldig når jobbkontroll er aktivert. Som standard er jobbkontroll bare aktivert for interaktive instruksjoner.

Eksempler #

vente brukes vanligvis i skallskripter som gyter barneprosesser som utføres parallelt.

For å illustrere hvordan kommandoen fungerer, opprett følgende skript:

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

La oss forklare koden linje for linje:

  1. Den første linjen heter shebang og forteller operativsystemet hvilken tolk som skal brukes til å analysere resten av filen.
  2. Vi bruker søvn kommando om å etterligne en tidkrevende bakgrunnsprosess.
  3. $! er en intern Bash-variabel som lagrer PID for den siste jobben som kjøres i bakgrunnen. I dette eksemplet er det PID for søvn kommando. Vi lagrer PID i en variabel (prosess_id).
  4. Skriver ut PID-nummeret.
  5. PID sendes til vente kommando som venter til søvn kommandoen fullføres.
  6. Skriver ut utgangsstatus for vente kommando. $? er en intern Bash-variabel som har utgangsstatus for den siste kommandoen som ble utført.

Hvis du kjører skriptet, vil det skrive ut noe slikt:

PID: 36353 Utgangsstatus: 0 

Her et eksempel med -n alternativ:

#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Første jobb fullført."vent ekko" Alle jobber fullført." 

Når skriptet kjøres, gyter det tre bakgrunnsprosesser. vent -n venter til den første jobben er fullført og ekkouttalelsen skrives ut. vente venter på at alle barnebakgrunnjobber skal fullføres.

første jobb fullført alle fullførte jobber 

Det siste eksemplet forklarer -f alternativ. Åpne terminalen og kjør:

sove 3600 og
[1] 46671 

Vent på prosessen:

vent 46671

Åpne en annen terminal og stopp prosessen med drepe kommando:

drep -STOP 46671

Når prosessstatusen er endret, blir vente kommandoen vil fullføre og returnere prosessutgangskoden.

Gjenta nå de samme trinnene, men bruk denne gangen vent -f $ pid:

sove 3600 ogvent -f 46671

Stopp prosessen fra den andre terminalen:

drep -STOP 46671

Denne gangen vente kommandoen fullføres ikke. Det vil løpe til søvn prosessen avsluttes.

Konklusjon #

De vente kommandoen venter på at de angitte jobbene skal fullføres og returnerer avslutningskoden for jobben.

Hvis du har spørsmål eller tilbakemeldinger, er du velkommen til å legge igjen en kommentar.

Mus Hvordan endre venstre og høyre museknapp på Windows 10 PC
Hvordan endre venstre og høyre museknapp på Windows 10 PC
Det er ganske vanlig at alle datamusenheter er ergonomisk designet for høyrehendte brukere. Men det er tilgjengelige musenheter som er spesielt design...
Mus Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Bruk av mus eller tastatur i feil stilling for overdreven bruk kan føre til mange helseproblemer, inkludert belastning, karpaltunnelsyndrom og mer. I ...
Mus Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
De siste årene har datamaskiner og operativsystemer utviklet seg sterkt. Det var en tid da brukere måtte bruke kommandoer for å navigere gjennom filad...