Żeby pobrać numer ostatniego procesu uruchumionego w tle wykorzystujemy zmienną $!
. Na przykład tak:
#!/bin/bash
./program &
numerek=$!
echo "Numer wystartowanego procesu ${numerek}"
czyProcesBiegnie=`ps a | grep -P "^\s+${numerek}\s+"`
if [[ "${czyProcesBiegnie}" = "" ]]; then
echo "Proces NIE BIEGNIE!!!"
else
echo "Proces biegnie"
fi
Polecenie grep
zostało tu użyte do sprawdzenia czy uruchomiony przez nas proces dalej działa. Jeśli jednak program dało się uruchomić, ale zaraz się on zakończy, będziemy mieli tylko jego numer przy starcie, ale grep
go nie znajdzie. To przy okazji sprawdzenie czy serwer się nie wysypał. Polecam się upewnić czy ps
jest w stanie drukować wyniki w stylu
PID TTY STAT TIME COMMAND
742 tty1 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
792 tty7 Rsl+ 1:31 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{dfc2d5d4-33b1-4f61-a875-42c79e4663c6} -background none -noreset -displayfd 17 -seat seat0 vt7
2634 pts/1 Ss 0:00 /bin/bash
To dość ważne ze względu na formatowanie. Na początku możemy mieć spacje, stąd ^\s+
w wyrażeniu regularnym.