Como funciona esse exemplo de rebanho canônico?
Quando se deve sincronizar programas (shell scripts) via sistema de arquivos, eu encontrei umflock
solução baseada emrecomendado (também deve funcionarno NFS). O exemplo canônico para uso de dentro de um script (dehttp://linux.die.net/man/1/flock) é:
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
Eu não entendo porque essa construção toda garante a atomicidade. Em particular, eu estou querendo saber em qual ordemflock -s 200
e200>/var/lock/mylockfile
são executados quando, e.bash
executa estas linhas de código. Esta ordem é garantida / determinista? Do jeito que eu entendi,devo ser determinista se este idioma deve funcionar. Mas como um sub shell é gerado em um processo filho, não entendo como esses dois processos se sincronizam. Eu só vejo uma condição de corrida entre esses dois comandos já.
Eu apreciaria se alguém pudesse fazer minha confusão sobre isso desaparecer e explicar por que essa construção pode ser usada para sincronizar processos com segurança.
Ao mesmo tempo, se alguém souber, eu estaria interessado em como é seguro escolher apenas algum descritor de arquivo arbitrário (como200
no exemplo), especialmente no contexto de um sistema de arquivos NFS grande com muitos clientes.