Bashでの群れと実行は安全ですか?

Bashでの群れと実行は安全ですか?

私が見た「標準」ロックスライスは次のとおりです。

(
    flock -n 200 || exit 1;
    # do stuff
) 200>program.lock

execそれでは、使用しても安全ですか? (テスト結果のようです。)子プロセスはロックを保持しますか?

(
    flock -n 200 || exit 1;
    exec /usr/bin/python vendors-notcoolstuff.py
) 200>program.lock

exec'dプロセスは開かれたファイルディスクリプタを保持し、クラスタはファイルディスクリプタを使用するため、機能する必要があることを曖昧に覚えています。ただし、これを明確かつ明示的に説明する文書が見つかりません。

記録上、これはLinux固有です。

ベストアンサー1

はい。 Execは単にプロセスイメージを置き換えますが、それでも同じプロセスなので、それに関連するオペレーティングシステムレベルのロックは変更されません。

動作していることを確認するのはとても簡単です。

ロックする

(
    flock -n 200 || exit 1;
    echo "locked"
    exec ./script
) 200>program.lock

スクリプト

sleep 100

./lock次の100秒以内に2回実行してみてください。ロックは一度だけ獲得するため、ロックはexec解除されません。

おすすめ記事