私はこれが中断することなくペアリングを提供すると思いましたが、begin-end
そうではありません。
#!/bin/bash
fun()(
flock 1 || { echo >&2 "$BASHPID: FAIL: $?"; exit 1; }
echo "$BASHPID begin"
sleep 1;
echo "$BASHPID end"
)
fun &
fun &
fun &
fun &
fun &
fun &
fun &
fun &
fun &
wait
私は何が間違っていましたか?
ベストアンサー1
このアプローチは次のように動作します。
fun()(
(flock 9 || { echo >&2 "$BASHPID: FAIL: $?"; exit 1; }
echo "$BASHPID begin"
sleep 1;
echo "$BASHPID end"
) 9>test
)
これにより、保護する必要があるコマンドが完了しない限り、ロックされたファイルは閉じられません。 (もちろん、test
より適切なものと交換する必要があります。例えば使用mktemp
。 )