может ли быть ситуация, когда команда flock оказывается в тупике? - PullRequest
0 голосов
/ 31 марта 2020
set -e

pidfile=/data/demo3

# lock it
exec 200<>$pidfile
flock -n 200 || exit 1

# my code 
echo "hello"
sleep 20
echo "bi"

У меня есть текстовый файл, и несколько процессов могут получить к нему доступ одновременно. Поэтому я использую команду flock для обеспечения проблемы параллелизма. Таким образом, процесс блокирует файл в момент времени = T1, а другой процесс хочет заблокировать тот же файл в одно и то же время = T1. Так не вызовет ли проблема то, какой процесс заблокирует файл первым или эта ситуация окажется в тупике? или я что-то упустил?

Если я использую этот код и блокирую этот файл demo3, и в то же время другой процесс хочет заблокировать этот файл, не вызовет ли это проблемы?

1 Ответ

0 голосов
/ 31 марта 2020

Нет, не должно быть никаких взаимоблокировок или конфликтов.

Как только процесс, выполняющий этот сценарий, пройдет flock, только секция # my code этого процесса будет выполняться, пока процесс не завершится. Другие экземпляры (процессы) скрипта завершатся с exit 1 на flock.

...