Linux

Bash wacht Commando

Bash wacht Commando

wacht is een opdracht die wacht tot de opgegeven taken zijn voltooid en de uitgangsstatus van de opdracht wacht op terugkeert.

sinds de wacht commando beïnvloedt de huidige uitvoeringsomgeving van de shell, het is geïmplementeerd als een ingebouwd commando in de meeste shells.

In dit artikel onderzoeken we de ingebouwde Bash wacht opdracht.

bash wacht Commando #

De algemene syntaxis van de wacht ingebouwd heeft de volgende vorm:

wacht [opties] ID 

ID kaart is het proces- of taak-ID. Als Nee ID kaart is opgegeven, wacht de opdracht totdat alle onderliggende achtergrondtaken zijn voltooid.

De wacht commando geeft de afsluitstatus van het laatste commando waarop is gewacht.

Bijvoorbeeld om te wachten op een achtergrondproces met PID 7654, je zou gebruiken:

wacht 7654

Wanneer meerdere processen worden gegeven, wacht de opdracht totdat alle processen zijn voltooid.

Taken worden gespecificeerd met behulp van de taakspecificatie ("jobspec"), wat een manier is om te verwijzen naar de processen waaruit de taak bestaat. Een jobspec begint met een percentagesymbool gevolgd door het jobnummer (%n). Hier is een voorbeeld:

Voer een opdracht op een achtergrond uit:

rsync -a /home /tmp/home &

De shell-taak-ID (omgeven door haakjes) en proces-ID worden op uw terminal weergegeven:

[2] 54377 

Om op de taak te wachten, voert u de wacht commando gevolgd door de taakspecificatie:

wacht %2

Wanneer aangeroepen met de -nee optie, de opdracht wacht slechts op een enkele taak van de gegeven pids of jobspecs om te voltooien en geeft de exit-status terug. Als er geen argumenten worden gegeven, wacht -n wacht tot een achtergrondtaak is voltooid en de status voor het verlaten van de taak wordt geretourneerd.

wacht -n 45432 54346 76573

In het bovenstaande voorbeeld, wacht -n drukt alleen de retourstatus af van de taak die als eerste wordt afgesloten; het toont niet de PID van de taak. Als u de job-pid of jobspec wilt krijgen waarvoor de exit-status wordt geretourneerd, gebruikt u de -p optie om het toe te wijzen aan een variabele:

wacht -p job_id -n 45432 54346 76573

-p optie werd geïntroduceerd in Bash 5.1. Als je een oudere Bash-versie gebruikt, krijg je de foutmelding 'ongeldige optie'.

De -f optie vertelt wacht om te wachten tot elke pid of jobspec daadwerkelijk wordt beëindigd voordat de afsluitcode wordt geretourneerd, in plaats van terug te keren wanneer de taakstatus wordt gewijzigd. Deze optie is alleen geldig wanneer taakbeheer is ingeschakeld. Taakbeheer is standaard alleen ingeschakeld voor interactieve prompts.

Voorbeelden #

wacht wordt meestal gebruikt in shellscripts die onderliggende processen voortbrengen die parallel worden uitgevoerd.

Maak het volgende script om te illustreren hoe de opdracht werkt:

#!/bin/bash slaap 30 & process_id=$! echo "PID: $process_id" wacht $process_id echo "Verlaat status: $?" 

Laten we de code regel voor regel uitleggen:

  1. De eerste regel heet shebang en vertelt het besturingssysteem welke interpreter moet worden gebruikt om de rest van het bestand te ontleden.
  2. We gebruiken de slaap commando om een ​​tijdrovend achtergrondproces te emuleren.
  3. $! is een interne Bash-variabele die de PID van de laatste taak op de achtergrond opslaat. In dit voorbeeld is dat de PID van de slaap opdracht. We slaan de PID op in een variabele (process_id).
  4. Drukt het PID-nummer af.
  5. De PID wordt doorgegeven aan de wacht commando dat wacht tot de slaap opdracht is voltooid.
  6. Drukt de uitgangsstatus af van de wacht opdracht. $? is een interne Bash-variabele die de exit-status van de laatst uitgevoerde opdracht bevat.

Als u het script uitvoert, wordt er zoiets als dit afgedrukt:

PID: 36353 Verlaatstatus: 0 

Hier een voorbeeld met de -nee keuze:

#!/bin/bash slaap 3 & slaap 30 & slaap 5 & wacht -n echo "Eerste taak voltooid." wait echo "Alle taken voltooid." 

Wanneer het script wordt uitgevoerd, spawnt het 3 achtergrondprocessen. wacht -n wacht tot de eerste taak is voltooid en het echo-statement is afgedrukt. wacht wacht tot alle achtergrondtaken voor kinderen zijn voltooid.

eerste taak voltooid alle taken voltooid 

Het laatste voorbeeld verklaart de -f keuze. Open de terminal en voer uit:

slaap 3600 &
[1] 46671 

Wacht op het proces:

wacht 46671

Open een andere terminal en stop het proces met de doden opdracht:

doden -STOP 46671

Zodra de processtatus is gewijzigd, wordt de wacht commando wordt voltooid en retourneert de exit-code van het proces.

Herhaal nu dezelfde stappen, maar gebruik deze keer wacht -f $pid:

slaap 3600 &wacht -f 46671

Stop het proces vanaf de andere terminal:

doden -STOP 46671

Deze keer de wacht opdracht wordt niet voltooid. Het loopt tot de slaap proces eindigt.

Conclusie #

De wacht opdracht wacht tot de opgegeven taken zijn voltooid en retourneert de afsluitcode van de taak.

Als je vragen of feedback hebt, laat dan gerust een reactie achter.

Hoe Xdotool te gebruiken om muisklikken en toetsaanslagen in Linux te stimuleren
Xdotool is een gratis en open source opdrachtregelprogramma voor het simuleren van muisklikken en toetsaanslagen. Dit artikel behandelt een korte hand...
Top 5 ergonomische computermuisproducten voor Linux
Veroorzaakt langdurig computergebruik pijn in uw pols of vingers?? Heb je last van stijve gewrichten en moet je constant de hand schudden?? Voelt u ee...
Hoe de muis- en touchpad-instellingen te wijzigen met Xinput in Linux
De meeste Linux-distributies worden standaard geleverd met de bibliotheek "libinput" om invoergebeurtenissen op een systeem af te handelen. Het kan in...