Los sistemas Unix en general evitan bloqueos obligatorios. Hay algunos casos en los que el kernel bloqueará un archivo contra modificaciones por parte de los programas del usuario, pero no si solo lo está escribiendo otro programa. Ningún sistema Unix bloqueará un archivo porque un programa lo está escribiendo.
Si desea que las instancias simultáneas de su script no pisen los dedos de los demás, debe utilizar un mecanismo de bloqueo explícito como .flock lockfile
Cuando abre un archivo para anexar, lo que >>hace, se garantiza que cada programa siempre escriba al final del archivo. Por lo tanto, la salida de varias instancias nunca se sobrescribirá entre sí, y si se turnan para escribir, su salida estará en el mismo orden que las escrituras.
Lo malo que podría suceder es si una de las instancias escribe varios fragmentos de salida y espera que salgan juntos. Entre escrituras consecutivas por una instancia, otras instancias pueden realizar sus propias escrituras. Por ejemplo, si la instancia 1 escribe foo, la instancia 2 escribe helloy solo entonces la instancia 2 escribe bar, entonces el archivo contendrá foohellobar.
Un proceso escribe efectivamente en el archivo cuando llama a la writellamada del sistema. Una llamada a writees atómica: cada llamada a writeescribe una secuencia de bytes que no serán interrumpidos por otros programas. A menudo hay un límite en la cantidad de datos que una sola llamada writeescribirá efectivamente: para tamaños más grandes, solo se escribe el comienzo de los datos y la aplicación debe writevolver a llamar . Además, muchos programas realizan el almacenamiento en búfer: acumulan datos en un área de memoria, luego los escriben en un fragmento. Algunos programas descargan el búfer de salida después de una línea completa u otra separación significativa. Con estos programas, puede esperar que las líneas enteras no se interrumpan, siempre que no sean demasiado largas (hasta unos pocos kilobytes; esto depende del sistema operativo). Si el programa no se descarga en puntos significativos, sino que solo se basa en el tamaño del búfer, es posible que vea algo como 4kB de una instancia, luego 4kB de otra instancia, luego nuevamente 4kB de la primera instancia y así sucesivamente.