hana_shinのLinux技術ブログ読者になるhana_shinのLinux技術ブログLinuxの技術情報を掲載しています。ネットワークをメインに掲載していきます。flockコマンドとは?ロックファイルを取得し、そのロックファイルを保持するコマンドを実行します。書式は以下になります。検証環境CentOS版数は以下のとおりです。(Core)カーネル版数は以下のとおりです。-r3.10.0-1160.el7.x86_64flockコマンドの版数は以下のとおりです。オプション一覧オプションは以下のとおりです。事前準備ターミナルを2つオープンします。それぞれ、ターミナル1,ターミナル2と呼びます。ターミナル1で実行します。テスト用のファイルを作成します。aa12345ロックファイルを作成します。排他ロックの使い方(-x)ターミナル1で実行します。排他モードでviコマンドを実行します。viが実行され、aaの中身が表示されます。aaターミナル2で実行します。排他モードでcatコマンドを実行します。viコマンドがロックファイルを保持しているので、catコマンドがブロックします。コマンドを終了します。aa^C次に、共有モードでcatコマンドを実行します。viコマンドがロックファイルを保持しているので、catコマンドがブロックします。コマンドを終了します。共有ロックの使い方(-s)ターミナル1で実行します。共有モードでviコマンドを実行します。viが実行され、aaの中身が表示されます。aaターミナル2で実行します。排他モードでcatコマンドを実行します。viコマンドがロックファイルを保持しているので、catコマンドがブロックします。コマンドを終了します。aa^C共有モードでcatコマンドを実行します。viコマンドがロックファイルを保持していますが、catコマンドを共有モードで実行しているので、ブロックしません。まとめコマンドA,B共に共有ロックを使った場合だけ、コマンドがブロックしないことがわかります。〇はロックが獲得できることを意味します。✖はロックが獲得できないことを意味します。flockコマンドが使用するシステムコールの確認straceコマンドを使うと、flockコマンドがflockシステムコールを呼び出していることがわかります。共有モードのときは、flockシステムコールの第2引数にLOCK_SHを指定していることがわかります。hana_shinのLinux技術ブログを参照してください。012345排他モードのときは、flockシステムコールの第2引数にLOCK_EXを指定していることがわかります。コマンド実行順序のシリアライズ化flockコマンドを使って、コマンドの実行順序をシリアライズしてみます。以下のTP(テストプログラム)を作成します。hana_shinのLinux技術ブログを参照してください。i=$((i+1))doneロックファイルを作成します。/tmp/lockログを確認するため、journalctlコマンドを実行します。-fTPを実行します。Aもう1つターミナルを開いて、TPを実行します。Bもう1つターミナルを開いて、TPを実行します。Cログを確認すると、コマンドの実行順序がシリアライズされていることがわかります。(PID=1870,NUM=4)flockコマンドを使わないと、以下のような実行結果になります。コマンドの実行順序がシリアライズされていないことがわかります。私が業務や記事執筆で参考にした書籍を以下のページに記載します。)はてなブログをはじめよう!hana_shinさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。