クラスタロックファイルだけを見ると、プロセスでコマンドが実行されていることがわかりますか?

クラスタロックファイルだけを見ると、プロセスでコマンドが実行されていることがわかりますか?

はいユーティリティLinuxflockflock()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

この記事から抜粋

関連情報