Wie könnte ich ein Bash-Skript schreiben, das ein lang laufendes Programm ausführt und die Prozess-ID des Programms in einer separaten Datei speichert?
Ich möchte so etwas wie
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
Wenn Sie dies jedoch genau tun, wird das ps
After- Tool ausgeführt .
Gibt es eine Möglichkeit, die Prozess-ID des erstellten Prozesses abzurufen?
long_running_tool
Prozess ersetzt wird. Folglich kehrt exec niemals zurück und die folgende Zeile wird niemals erreicht. Siehehelp exec
,execve(2)
.Antworten:
Sie können den Prozess einfach im Hintergrund mit "&" ausführen und dann die PID des Hintergrundprozesses mit "$!"
Dann warten Sie optional $! Wenn Sie möchten, dass die Shell blockiert, bis der Prozess die Ausführung abgeschlossen hat.
quelle
Wie bereits erwähnt,
exec
ersetztbash
mit dem angegebenen Programm, Beibehaltung des PID.quelle