はいユーティリティLinuxflock
flock()
Linux C APIに基づいて実装されていますか?
ロックファイルだけを見ると、プロセスでコマンドが実行されていることがわかりますか?デーモン化されたコマンドのflock
実行が完了すると、ロックファイルは変更されないようです。実行中と完了後の様子は次のとおりです。
$ ls -l ../sleep.flock.file
-rw-rw-r-- 1 t t 0 Oct 30 14:01 ../sleep.flock.file
$ ls -l ../sleep.flock.file
-rw-rw-r-- 1 t t 0 Oct 30 14:01 ../sleep.flock.file
ありがとうございます。
答え1
はい。に明確に記載されているman 1 flock
このflock
コマンドはflock()
、man 2 flock
コメントセクションでは、これはflock()
Linuxカーネル2.0から始まるシステムコールを介して実装されています。
答え2
$ flock -xn /home/vagrant/forever.lck -c /var/tmp/forever.sh
上記のクラスタコマンドは、/home/vagrant/forever.lckファイルを開きます。排他的(-x)ファイルロックそして、指定されたコマンド(-c)を実行します。 [forever.shはsleep 25dコマンドを使用して完了するのに25日かかります。]
2番目のインスタンスを実行すると、Flockは独自のファイルロックがすでに存在することを認識します。
$ flock -xn /home/vagrant/forever.lck -c /var/tmp/forever.sh
$ echo $?
1
Flockがファイルをロックできず、-n(非ブロック)フラグで実行されると、Flockコマンドはエラーが発生したことを示す終了コードで自動的に終了します。
Flockの有用な点は、元のプロセスが完了するまでファイルロックがそのまま残り、この時点でFlockがファイルロックを解除することです。これは、プロセスが正常に完了したか失敗した場合でも同じです。
ロックはここで重要であり、目に見えませんls
。