Что может быть тривиальным или простым сценарием использования проверки времени -из -для времени -из -в Bash?

Да, это возможно, если вы удалите и заново -создадите свой раздел из того же сектора. Система не выполняет «полный формат» при создании файловой системы. Кстати, вы можете сделать то же самое, чтобы расширить раздел. Удалите и создайте заново, начиная с того же сектора и заканчивая другим

0
27.03.2021, 12:08
1 ответ

Наиболее распространенное состояние гонки такого типа, которое я вижу на этом сайте, связано с обработкой идентификаторов процессов (PID )и сигнализацией на их основе.

Кто-то может использовать ps+ grep, чтобы получить PID для некоторого именованного процесса, а затем kill, чтобы сигнализировать об этом. Между получением PID и его сигнализацией PID мог исчезнуть. Использование pkillминимизирует окно для возникновения этой ошибки.

В других сценариях удержание PID и ожидание, что он всегда будет ссылаться на один и тот же процесс в течение длительного периода времени (, например, в «файле PID» ), может привести к отправке сигналов. к неправильным процессам. Это связано с тем, что все системы Unix повторно используют идентификаторы PID.

Другой распространенной проблемой является блокировка файлов, то есть использование файловой системы для обеспечения механизма блокировки для синхронизации нескольких процессов и критических разделов. Например, можно проверить, существует ли какой-либо «файл блокировки», и если нет, создать его и тем самым «получить блокировку». В -между проверкой существования файла и созданием файла блокировки есть возможность для другого процесса также понять, что файл блокировки не существует :

while [ -e "$lockfile" ]; do
    sleep 10
done
touch "$lockfile"
echo 'got lock'  # or did I?

# do work

rm -f "$lockfile"

Решение в этом случае заключается в использовании специального инструмента блокировки файлов -, такого как flock,или использовать блокировку каталога , так как mkdirявляется атомарным:

while ! mkdir "$lockdir" 2>/dev/null; do
    sleep 10
done
echo 'got lock'

# do work

rmdir "$lockdir"

Это по-прежнему не будет надежно работать в сетевых файловых системах, таких как NFS, поскольку они не обеспечивают атомарных операций для создания каталогов.

Несомненно, есть много других примеров.

1
28.04.2021, 22:56

Теги

Похожие вопросы