Auf Prozess ende warten

Manchmal möchte man in einen Script warten bis ein Prozess geendet hat, denn einige Prozesse können nach dem stoppen noch mehrere Sekunden aktiv bleiben.

Dies geht mit einer einfachen while schleife:

#!/bin/bash
 
while [[ -n "$(pgrep -f 'httpd')" ]]
do
  echo "Process HTTP: $(pgrep -f 'httpd') is still running..."
  sleep 1
done
echo "Process finished"

Nun kann man natürlich auch fuser benutzen, um zu testen ob auch wirklich kein Prozess mehr auf das Filesystem zugreift:

#!/bin/bash
 
WEB_FILESYSTEM="/srv/www/"
 
while [[ -n "$(fuser -m $WEB_FILESYSTEM)" ]]
do
  echo -e "The following processes are still accessing the filesystem: $(fuser -mu $WEB_FILESYSTEM)."
  sleep 1
done
echo "No processes are accessing the filesystem."

Das ganze lässt sich nun noch mit einer OR-Bedingung verknüpfen:

#!/bin/bash
 
WEB_FILESYSTEM="/srv/www/"
 
while [[ -n "$(pgrep -f 'httpd')" || -n "$(fuser -m $WEB_FILESYSTEM)" ]]
do
  echo -e "Process (HTTP: $(pgrep -f 'httpd')) is still running and the following processes are still accessing the filesystem: $(fuser -mu $WEB_FILESYSTEM)."
  sleep 1
done
echo "No processes are running or accessing the filesystem."

Published by

Steven Varco

Steven ist ein Redhat RHCE-Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.