2012-06-11 6 views
11

W skrypcie basha w Linuksie używam flock [polecenie flock, a nie system call flock()] do implementacji blokowania plików, chroniąc tym samym równoczesny dostęp do współdzielonego zasobu [który jest plikiem w tmpfs].Czy stado zostało automatycznie zwolnione przy wyjściu z procesu?

mam teleskopowe pułapek do obsługi nieprawidłowe zakończenie mojego skryptu: trap "{ rm -rf $LOCK ; rm -rf $TMPFS_FILE; exit 255; }" SIGINT SIGTERM

gdzie $ LOCK jest mój plik blokady i $ TMPFS_FILE jest mój zasób udostępniony.

Moje pytanie brzmi: czy muszę jawnie odblokować plik? Czy Linux robi to dla mnie po zakończeniu programu [zarówno w przypadku dobrowolnego zakończenia, jak i wymuszonego] scenariusza?

+0

Pokrewne pytanie o stadzie() w Pythonie: http://stackoverflow.com/questions/3918385/flock- pytanie. –

+2

@CodeGnome Myślę, że chodzi o polecenie 'flock', a nie o wywołanie systemowe' flock() ' – mkb

Odpowiedz

12

Od man 1 flock:

-u, --unlock

  Drop a lock. This is usually not required, since a lock is 
      automatically dropped when the file is closed. However, it may 
      be required in special cases, for example if the enclosed com‐ 
      mand group may have forked a background process which should not 
      be holding the lock.