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.