2012-11-25 13 views

Odpowiedz

33

Nie ma nic szczególnego w liczbie 200. Jest to po prostu przykład użyty na stronie man polecenia flock; i zdarza się, że jest to duża liczba, więc jest mało prawdopodobne, aby kolidowało z deskryptorem pliku innego pliku otwieranego podczas skryptu.

W swoim komentarzu, pytasz o:

( 
    flock -e 200 
    echo "In critical section" 
    sleep 5 
) 200>/tmp/blah.lockfile 
echo "After critical section" 

nawiasach () tworzą podpowłoce; nowy proces, oddzielny od procesu nadrzędnego. Numer 200>/tmp/blah.lockfile powoduje, że proces ten otwiera się do zapisania na deskryptorze 200 pliku. Polecenia wewnątrz nawiasów są wykonywane wewnątrz tej powłoki.

flock -e 200 uzyskuje wyłączne blokady na pliku wskazywanego przez deskryptor pliku 200. Ekskluzywny blokady oznacza, że ​​każdy, kto próbuje uzyskać blokadę na tym pliku, bądź wyłączne lub dzielone, zablokuje (oczekiwanie), aż ta blokada ma zrzeczono się, lub jeśli nie uda im się zablokować limitu czasu. Tak więc podczas pozostałej części podpowłoki (polecenia echo i sleep) blokada będzie utrzymywana przez tę podpowłokę i nikt inny nie może uzyskać tej blokady. Po zakończeniu podpowlekania plik zostanie zamknięty, a blokada zostanie zrezygnowana.

+0

Dzięki. Jestem nowy w bashowaniu skryptów, czy mógłbyś wytłumaczyć mi resztę kodu: '( flock-e-e-mail: e-mail: e-mail: e-mail:" 2002 " Po sekcji krytycznej " – Subway

+0

@Rapher Edytowałem moją odpowiedź, aby opisać, jak to działa. –

+0

Dzięki! Jest jedna rzecz, której nie rozumiem. Dlaczego podpowłoką jest konieczne? Dlaczego nie po prostu wziąć blokadę przed wykonaniem kodu i puścić go po zakończeniu wykonywania kodu? – Subway