Jak napisać skrypt Bash, który uruchamia długo działający program i przechowuje identyfikator procesu programu w osobnym pliku?
Chcę coś takiego
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
Jednak wykonanie tego dokładnie spowoduje wykonanie narzędziaps
po zakończeniu.
Czy istnieje sposób na uzyskanie identyfikatora procesu utworzonego?
long_running_tool
proces. W związku z tym exec nigdy nie powraca i nigdy nie zostaje osiągnięty następujący wiersz. Zobaczhelp exec
,execve(2)
.Odpowiedzi:
Możesz łatwo uruchomić proces w tle za pomocą „&”, a następnie uzyskać PID procesu w tle za pomocą „$!”
Następnie opcjonalnie poczekaj $! jeśli chcesz, aby powłoka blokowała się, dopóki proces nie zakończy wykonywania.
źródło
Jak wspomniano wcześniej,
exec
zastępujebash
go określonym programem, zachowując PID.źródło