2012-11-25 3 views

답변

33

Theres는 숫자 200에 특별한 의미가 없습니다. 이것은 단지 flock 명령의 맨 페이지에서 사용 된 예제입니다. 큰 숫자가 될 수 있으므로 스크립트 중에 여는 다른 파일의 파일 설명자와 충돌하지는 않습니다. 귀하의 코멘트에서

, 당신에 대해 물어 :

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

괄호 () 서브 쉘을 만들; 상위 프로세스와 별도로 새 프로세스. 200>/tmp/blah.lockfile은 해당 프로세스가 파일 설명자 200에 쓰기 위해 /tmp/blah.lockfile을 열도록합니다. 괄호 안의 명령은 해당 셸 내에서 실행됩니다.

flock -e 200은 파일 설명자 200이 가리키는 파일에 배타적 잠금을 얻습니다. 배타적 잠금은 해당 파일에 대한 잠금을 독점 또는 공유 중 하나를 얻으려는 다른 모든 사람이이 잠금이있을 때까지 차단 (대기)한다는 것을 의미합니다. 그들은 시간 초과되거나 블록하지 않을 것을 요청하면 실패합니다. 따라서 나머지 서브 쉘 (echosleep 명령) 동안 잠금은 해당 서브 쉘에 의해 유지되고 다른 누구도 해당 잠금을 확보 할 수 없습니다. 서브 쉘이 끝나면 파일은 닫히고 잠금은 해제됩니다.

+0

감사합니다. 나는 스크립트를 bash하는 것이 처음이다. 나머지 코드에 대해 설명해 주시겠습니까? ( flock -e 200 echo "중요 섹션" sleep 5 ) /tmp/blah.lockfile echo " 임계 부분 이후 " – Subway

+0

@Rapher 어떻게 작동하는지 설명하는 나의 대답을 편집했습니다. –

+0

감사! 그러나 내가 이해하지 못하는 한가지가 있습니다. 서브 쉘이 필요한 이유는 무엇입니까? 왜 코드를 실행하기 전에 자물쇠를 잡고 코드 실행이 끝난 후에 그냥 놓아 두는 것이 좋을까요? – Subway