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." |