Em um pipeline, todos os processos são iniciados concorrentemente , não há nenhum que seja anterior aos outros.
Você poderia fazer:
(echo "$BASHPID" > pid-file; exec inotifywait -m ...) | while IFS= read -r...
Ou portavelmente:
sh -c 'echo "$$" > pid-file; exec inotifywait -m ...' | while IFS= read -r...
Observe também que, quando a subshell que executa o loop while
terminar, inotifywait
será eliminado automaticamente na próxima vez que gravar algo no stdout.