혼란스러운 오류가 발생했습니다.
rm: cannot remove `xxx/app/cache/prod': Directory not empty
다음 명령으로 발생한 것입니다.
rm -rf $cache_dir/*
어디로 $cache_dir정의xxx/app/cache
그래서 나는 그것을 본다 : dir에서 rm모든 것을 cache/prod제거한 다음 cache/prod디렉토리 를 제거하기 직전에 -다른 프로그램이 그 안에 파일 / 디렉토리를 생성하여 rm실패를 일으켰다 .
내 가정이 맞습니까?
@Johnny : 그래, 내가 실제로 구현 한 것입니다 :-)
—
zerkms
비록 그것조차 완전히 안전하지는 않습니다. 앱이 현재 해당 디렉토리에서 작동하지 않는 경우 이동과 함께 정상적으로 작동합니다.
—
Patrick
rm -rf스레드 안전 과는 아무런 관련이 없습니다 . 동일한 디렉토리에서 여러 번 동시에 실행하면 디렉토리가 삭제됩니다. 이것은 rm -r원자 적이 지 않은 것입니다.
@Gilles : "여러 코드가 동시에 여러 스레드에 의해 안전한 실행을 보장하는 방식으로 공유 데이터 구조를 조작하는 경우 코드가 스레드로부터 안전합니다". 따라서 "스레드"를
—
zerkms
rm호출 로 가정하면 스레드 안전성에 대해 말할 수 있습니다. 그러나 어쨌든, 그것은 아무것도 바뀌지 않습니다
rm -r원자가 아닙니다. 를rm -rf실행 하는 동안 디렉토리에 더 이상 파일이 작성되지 않도록 하려면 먼저 이름을 바꾼 다음 이름을 바꾼 디렉토리를 제거하십시오.