Linux-Shell: Prozess starten sobald ein anderer beendet ist

Ich hatte zuletzt das Problem zu lösen, dass ich einen neuen Prozess auf der Linux-Shell starten wollte, sobald ein anderer, bereits laufender Prozess beendet wurde.

Hintergrund: beide Prozesse verarbeiten Videos mit ffmpeg und haben eine Laufzeit in der Größenordnung von Tagen. Hier macht es aufgrund des Ressourcenverbrauchs wenig Sinn, beide parallel laufen zu lassen.

Hätte ich vorher gewusst, dass beide nacheinander arbeiten sollen, wäre die Lösung mit

% php encode_videos.php directory1 && \
php encode_videos.php directory2

sehr einfach gewesen.

Der erste Prozess lief nun aber bereits. Wie startet man also den zweiten Prozess sobald der erste beendet ist?

Die Lösung heißt tail(1):

% tail -f --pid=$(pidof php) /dev/null && \
php encode_videos.php directory2

tail hat eine Option --pid, welche die Angabe einer PID erfordert. Sobald der betreffenden Prozess beendet wird, beendet sich tail ebenfalls (mit Status-Code 0), sodass der zweite Teil des Kommandos ausgeführt wird.

(Das tail auf macOS hat diese Option nicht, es ist vermutlich eine GNU-Eigenart :-))