Se você estiver em uma variante Debian, você tem start-stop-daemon
available, que faz tudo isso para você de uma maneira muito mais limpa. Em particular:
start-stop-daemon --make-pidfile --pidfile "$PIDFILE" --background \
--no-close --exec "${PROGDIR}/${PROGNAME}" --start -- -l "$IPADDR" \
>> "${LOGDIR}/${OUTLOG}" 2>> "${LOGDIR}/${OUTLOG}" </dev/null
deve estar bem perto do que você quer. Ele coloca o PID em um arquivo em vez de em uma variável, mas você pode, naturalmente, lê-lo de volta em uma variável facilmente.