I sistemi Unix in generale evitano i blocchi obbligatori. Ci sono alcuni casi in cui il kernel bloccherà un file contro le modifiche dei programmi utente, ma non se viene semplicemente scritto da un altro programma. Nessun sistema unix bloccherà un file perché un programma ci sta scrivendo.
Se vuoi che le istanze simultanee del tuo script non si calpestino sulle dita dei piedi degli altri, devi usare un meccanismo di blocco esplicito come .flock lockfile
Quando si apre un file per l'aggiunta, il che >>fa sì che ogni programma scriva sempre alla fine del file. Quindi l'output delle istanze multiple non si sovrascriverà mai a vicenda, e se si alternano per scrivere, il loro output sarà nello stesso ordine delle scritture.
La cosa brutta che potrebbe accadere è se una delle istanze scrive diversi blocchi di output e si aspetta che vengano pubblicati insieme. Tra le scritture consecutive di un'istanza, altre possono eseguire le proprie scritture. Ad esempio, se l'istanza 1 scrive foo, quindi l'istanza 2 scrive helloe solo allora l'istanza 2 scrive bar, il file conterrà foohellobar.
Un processo scrive efficacemente nel file quando chiama la writechiamata di sistema. Una chiamata a writeè atomica: ogni chiamata a writescrive una sequenza di byte che non verrà interrotta da altri programmi. Esiste spesso un limite alla quantità di dati a cui una singola chiamata writescriverà effettivamente: per dimensioni maggiori, viene scritto solo l'inizio dei dati e l'applicazione deve richiamare writenuovamente. Inoltre, molti programmi eseguono il buffering: accumulano i dati in un'area di memoria, quindi li scrivono in un blocco. Alcuni programmi scaricano il buffer di output dopo una riga completa o un'altra separazione significativa. Con tali programmi, puoi aspettarti che intere linee siano ininterrotte, purché non siano troppo lunghe (fino a pochi kilobyte; questo dipende dal sistema operativo). Se il programma non scarica in punti significativi, ma solo in base alla dimensione del buffer, potresti vedere qualcosa come 4kB da un'istanza, quindi 4kB da un'altra istanza, quindi ancora 4kB dalla prima istanza e così via.