rmdir(2) falhará se o diretório não estiver vazio. Se outro processo estiver criando arquivos enquanto rm(1) estiver removendo-os, ele não saberá excluí-los e, consequentemente, quando chegar a hora de rm(1) tentar excluir o que acredita que deveria ser um diretório vazio, ele falhará com o erro você postou.
Uma forma de excluir o diretório em face das criações de arquivos simultâneos no diretório é renomeá-lo:
mv a a~
rm -rf a~
É possível que isso não funcione se os processos que criam os arquivos em a/b não o fizerem por caminho ( open(2) vs. openat(2) ).
Estou assumindo que o (s) processo (s) que cria arquivos em a/b recriará esse diretório se ele não existir ou manipulará a falha normalmente se não existir. Como você já está tentando excluir o diretório de outros processos, isso parece uma suposição segura.