一般的に、私はJavaScriptよりもBashでソフトウェア開発の概念をよりよく説明できます。
使用時間(TOCTOU)確認についてはWikipediaの現在の開始段落:
ソフトウェア開発における使用確認時間(TOCTOU、TOCTTOU、またはTOC / TOU)は、セキュリティなどのシステムの一部のヘルスチェックに関連する競合状態によって引き起こされるソフトウェアエラーの一種です。資格証明)とその確認結果の使用。
Bashで時間シナリオを使用するための単純または単純な確認時間は何ですか?
ベストアンサー1
このサイトで見られるこのタイプの最も一般的な競合条件は、プロセスID(PID)処理とそれに基づく信号伝送に関連しています。
誰かps
+を使用してgrep
名前付きプロセスのPIDを取得し、そのkill
プロセスにシグナルを送信できます。 PID を受信して信号を送信する間に、PID が消えた可能性があります。pkill
このエラーの発生を最小限に抑えるウィンドウを使用してください。
他の場合には、PIDを維持し、長い間常に同じプロセス(たとえば、「PIDファイル」)を参照することを期待すると、信号が誤ったプロセスに送信される可能性があります。これは、すべてのUnixシステムがPIDを再利用するためです。
もう1つの一般的な問題は、ファイルシステムを使用してマルチプロセス同期と重要セクションのロックメカニズムを提供するファイルロックです。たとえば、特定の「ロックファイル」が存在するかどうかをテストし、存在しない場合はそれを作成して「ロックを取得」できます。ファイルが存在することを確認し、ロックファイルを生成する間に、他のプロセスがロックファイルが存在しないことに気づく可能性があります。
while [ -e "$lockfile" ]; do
sleep 10
done
touch "$lockfile"
echo 'got lock' # or did I?
# do work
rm -f "$lockfile"
解決策は次のとおりです。これたとえば、専用のファイルロックツールを使用しflock
たり、ロックを使用したりします。目次、mkdir
原子的であるので:
while ! mkdir "$lockdir" 2>/dev/null; do
sleep 10
done
echo 'got lock'
# do work
rmdir "$lockdir"
NFSなどのネットワークファイルシステムはディレクトリを作成するためのアトミックタスクを提供していないため、これはまだ安定していません。
間違いなく他の多くの例があります。