1

У меня есть часть скрипта bash, которую я выполняю от имени пользователя root:

rm -f ../../include/profile.h; \
cp profile.h ../../include/profile.h

файл ../../include/profile.h идет речь, имеет разрешения:

-rw-r--r-- 1 root root 12178 Nov  5 02:00 ../../include/profile.h

Большую часть времени, фрагмент работает нормально, но очень редко, невозможно воспроизвести, он терпит неудачу:

cp: cannot create regular file `../../include/profile.h': File exists

Я проверил, что нет другой части программы, которая выполнялась бы параллельно, которая могла бы записать файл между двумя операторами, создавая таким образом условие гонки, которое объясняло бы поведение. Там нет другого места, чем выше, который выполняется только один раз, который написал бы этот файл.

Система

ядро:

Linux dev64 2.6.32.63+drm33.26-64.128-a10 #6 SMP Fri Jul 25 15:21:56 PDT 2014 x86_64 x86_64 x86_64 GNU/Linux

дистрибутив:

CentOS release 6.3 (Final)

Что может вызвать появление этого сбоя ??

1 ответ1

0

использование

strace cp profile.h ../../include/profile.h 2>logfile

и искать:

stat("../../include/profile.h", 0x7ffdca347950) = -1 ENOENT (No such file or directory)
open("../../include/profile.h", O_WRONLY|O_CREAT|O_EXCL, 0600) = 4

Это скажет вам, что происходит. В этом примере файл не существовал до cp (который он определил), следовательно, O_CREAT | O_EXCL.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .