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