flock のマニュアル ページによると、flock には -E または --exit-conflict-code フラグがあり、競合が発生した場合に flock の終了コードを設定するために使用できます。
-E, --conflict-exit-code 番号
-n オプションが使用されていて競合するロックが存在する場合、または -w オプションが使用されていてタイムアウトに達した場合に使用される終了ステータス。デフォルト値は 1 です。数値は 0 から 255 の範囲である必要があります。
マニュアルページには次のようにも記載されています。
終了ステータス
このコマンドは、すべてに対して sysexits.h 終了ステータス値を使用します。ただし、オプション -n または -w のいずれかを使用してロックの取得に失敗し、-E オプションで指定された終了ステータス (デフォルトでは 1) を報告する場合を除きます。-E で指定される終了ステータスは、0 から 255 の範囲でなければなりません。
コマンドバリアントを使用し、子を実行すると、終了ステータスは子コマンドの終了ステータスになります。
そのため、「コマンド」バリアントを使用しているときに -n または -w フラグを使用すると、両方の終了ステータスを確認できます。
例:
$ flock --exclusive /tmp/flock.lock bash -c 'exit 42'; echo $?
42
$ flock --exclusive /tmp/flock.lock flock --exclusive --nonblock --conflict-exit-code 100 /tmp/flock.lock bash -c 'exit 42'; echo $?
100
最初の例では、flock で実行しているプロセスの終了ステータスが返されることがわかります。2 番目の例では、ロックの競合を作成しています。その場合、flock 自体は、指定したステータス コード (100) を返します。--conflict-exit-code フラグで値を指定しない場合、代わりに 1 が返されます。ただし、値 1 を返す可能性のある他のプロセス/スクリプトからの混乱を防ぐために、あまり一般的でない値を設定することを好みます。