FLOCK

Section: User Commands (1)
Updated: July 2014
Index Return to Main Contents
 

名前

flock - シェルスクリプトからロックを管理する。  

書式

flock [options] file|directory command [arguments]
flock [options] file|directory -c command
flock [options] number  

説明

このユーティリティは flock(2) のロックをシェルスクリプト内、またはコマンドラインから管理する。

上記の 1 番目と 2 番目の形式は、 su(1) または newgrp(1) と同じような方式で、 command 実行時のロックの取得をラップする。 これらのコマンドは指定された file または directory を、 もし存在しない場合は (適切な権限があれば) 作成を行ってから、ロックする。 デフォルトでは、 flock はロックを即時に取得するのではなく、ロックが可能になるまで待つ。

3 番目の形式では、ファイルディスクリプター number の オープンされたファイルを使う。 どのように使うかは、下記の例を参照すること。  

オプション

-c, --command command
引き数なしの 1 つの command を、シェルに -c オプションを付けて渡す。
-E, --conflict-exit-code number
-n オプションが使われて、ロック競合が起こった場合、 または、-w オプションが使われて、タイムアウトに達した場合、 指定した返り値を使う。 デフォルトの値は 1 である。
-F, --no-fork
command を実行する前にフォークしない。 実行時に、flock プロセスは command に置き換えられて、 command がロックの保持を継続する。 このオプションは、ロックを保持するものが何も残らない --close とは互換性がない。
-e, -x, --exclusive
排他ロック (書き込みロックとも呼ばれる) を取得する。 これがデフォルトである。
-n, --nb, --nonblock
ロックが即時に取得できない場合、待たずに失敗する。 使用される返り値は、 -E オプションを参照すること。
-o, --close
command を実行する前に、ロックを保持するファイルディスクリプターを クローズする。 これは、ロックを保持させたくない子プロセスを、 command が生成する場合に役立つ。
-s, --shared
共有ロック (読み込みロックとも呼ばれる) を取得する。
-u, --unlock
ロックを解放する。 ロックはファイルがクローズされるときに自動的に解放されるので、 通常は必要ない。 しかし、例えばコマンドグループがロックを保持させたくない バックグランドプロセスをフォークさせるといった、特別なケースで 必要となることがある。
-w, --wait, --timeout seconds
seconds 以内にロックが取得できない場合、失敗する。 小数値を指定することができる。 使用される返り値は -E オプションを参照すること。 seconds を 0 に指定すると、--nonblock と解釈される。
--verbose
ロックを取得するのにかかった時間、またはロックが取得できなかった 理由をレポートする。
-V, --version
バージョン情報を表示して、終了する。
-h, --help
ヘルプを表示して、終了する。
 

shell1> flock /tmp -c cat
shell2> flock -w .007 /tmp -c echo; /bin/echo $? ディレクトリ /tmp の排他ロックを設定し、2 番目のコマンドは失敗する。
shell1> flock -s /tmp -c cat
shell2> flock -s -w .007 /tmp -c echo; /bin/echo $? ディレクトリ /tmp の共有ロックを設定し、2 番目のコマンドは失敗しない。 共有ロックを取得しようとすると、2 番目のコマンドは失敗する点に注意すること。
shell> flock -x local-lock-file echo 'a b c'
'a b c' を echo する前に、排他ロック "local-lock-file" を取得する。
(

  flock -n 9 || exit 1
  # ... ロックの元で実行するコマンド ... ) 9>/var/lock/mylockfile この形式はシェルスクリプト内で使うのに便利である。 ファイルをオープンするモードは、 flock には関係しない。 > または >> を使うと、ロックファイルが存在しない場合に、 ロックファイルを作成することができる。 ただし、書き込み許可が必要である。 < を使う場合、ファイルは既に存在している必要があるが、 読み込み許可だけが必要である。
[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
これはシェルスクリプトの有用な定型コードである。 これをロックしたいシェルスクリプトの先頭に置くと、 最初の実行時に自動的にロックが行われる。 実行されるシェルスクリプトに環境変数 $FLOCKER が設定されていない場合、 右側の引き数で再実行する前に、 flock を実行して排他的なブロックされないロックを取得する (スクリプト自体をロックファイルとして使う)。 これは、環境変数 FLOCKER を右側の値として設定するので、再度実行されない。
 

返り値

このコマンドは sysexits.h の返り値をすべてにおいて使用する。 ただし、オプション -n または -w が使われた場合は、ロックの取得の失敗を -E オプションで指定された返り値 (デフォルトは 1) を使ってレポートする。

command 引き数が使われて、かつ子のコマンドが実行された場合、 返り値は子のコマンドの返り値となる。  

著者

H. Peter Anvin  

著作権

Copyright © 2003-2006 H. Peter Anvin.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  

関連項目

flock(2)  

入手方法

flock コマンドは、util-linux パッケージの一部であり、 Linux Kernel Archive から入手できる。


 

Index

名前
書式
説明
オプション
返り値
著者
著作権
関連項目
入手方法

This document was created by man2html, using the manual pages.
Time: 12:49:37 GMT, August 02, 2019