2012-11-25 9 views
24

In Bezug auf diesen Thread: bash flock: exit if can't acquire lockbash flock: Warum 200?

Ich werde es begrüßen, wenn jemand mir erklären kann, was die ‚200‘ tut stehen.

Ich habe über Flock gelesen und es scheint, dass 200, wenn Sie einen Dateideskriptor angeben, aber was ist so gut an dieser Nummer?

+2

Es ist nur eine beliebige Datei-Deskriptor-Nummer. – Mat

Antwort

33

Theres nichts besonderes über die Zahl 200. Es ist nur zufällig das Beispiel in der man-Seite des Befehls flock verwendet; und es handelt sich um eine große Zahl. Es ist daher unwahrscheinlich, dass sie mit dem Dateideskriptor einer anderen Datei in Konflikt steht, die Sie während des Skripts öffnen.

In Ihrem Kommentar, fragen Sie:

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

Die Klammern () eine Subshell erstellen; ein neuer Prozess, getrennt vom übergeordneten Prozess. Die 200>/tmp/blah.lockfile bewirkt, dass dieser Prozess /tmp/blah.lockfile zum Schreiben auf Dateideskriptor 200 öffnet. Die Befehle innerhalb der Klammern werden innerhalb dieser Shell ausgeführt.

flock -e 200 erhält eine exklusive Sperre für die Datei, auf die der Dateideskriptor 200 zeigt. Eine exklusive Sperre bedeutet, dass jeder, der versucht, eine Sperre für diese Datei zu erhalten, entweder exklusiv oder freigegeben, blockiert (wartet) aufgegeben wurden, oder fehlschlagen, wenn sie eine Zeitüberschreitung oder eine Blockade nicht erreichen. Während des restlichen Rumpfes der Subshell (echo und sleep Befehle) wird die Sperre von dieser Subshell gehalten, und niemand kann diese Sperre erhalten. Sobald die Subshell beendet ist, wird die Datei geschlossen und die Sperre aufgehoben.

+0

Danke. Ich bin neu Scripting einzuschlagen, könnten Sie bitte den Rest des Codes mir erklären: '( Herde -e 200 echo "In kritischen Abschnitt" sleep 5 ) 200> /tmp/blah.lockfile echo" Nach dem kritischen Abschnitt " – Subway

+0

@Rapher Edited meine Antwort zu beschreiben, wie das funktioniert. –

+0

Danke! Eines verstehe ich allerdings nicht. Warum ist die Subshell notwendig? Warum nehmen Sie nicht einfach die Sperre, bevor Sie den Code ausführen, und lassen Sie ihn los, nachdem die Codeausführung abgeschlossen ist? – Subway

Verwandte Themen