私はmacOSを使用しています。一口有効です。 SIPを使用するスクリプトが変更または生成された後、なぜそれほど遅く実行されるのかを理解しようとしています。
そして、vimやnanoなどのエディタを使ってスクリプトを修正して実行すると、./script.bash
各修正後に初めてスクリプトを完了するのに約1秒かかります。
例えば。 script.bashが次の場合:
#!/bin/bash
echo 1
私はそれを次のように変更しましたvim
。それを実行するのに約10倍の時間がかかりました。
#!/bin/bash
echo 1
echo 2
bash-3.2$ time ./script.bash # First time after modification by vim
1
2
real 0m0.884s
user 0m0.001s
sys 0m0.002s
bash-3.2$ time ./script.bash # Second time after modification by vim
1
2
real 0m0.003s
user 0m0.001s
sys 0m0.002s
現在、いくつかのコマンドの出力リダイレクト(たとえば)を介してファイルを添付しますが、echo "echo 3" >> script.bash
まだスクリプトを呼び出すと./script.bash
遅延が消えます。
bash-3.2$ echo "echo 3" >> script.bash
bash-3.2$ time ./script.bash # First time after modification by echo
1
2
3
real 0m0.004s
user 0m0.001s
sys 0m0.002s
bash-3.2$ time ./script.bash # Second time after modification by echo
1
2
3
real 0m0.002s
user 0m0.001s
sys 0m0.001s
それでは、ファイルを作成する2つの方法の違いは何ですか?なぜ遅延は次にのみ発生するのですか?一口できるようにする?
答え1
私が見つけたこの記事私はこれがあなたの問題を説明すると信じています。
Appleは公証を導入し、それが開発者に不快感を与えただけでなく、ユーザーが初めて新しい実行可能ファイルを実行したときにAppleがサーバーの応答を待っている間に実行を遅らせたため、ユーザーの経験も低下しました。私にとって、この確認は約1秒かかります。
これは、インターネットからダウンロードしたファイルにのみ適用されるわけではなく、Finderを介してファイルを実行するためにのみ適用されるわけではありません。それがすべてです。したがって、1行のシェルスクリプトを作成して端末で実行しても遅延が発生します。
公証確認の場合は結果がキャッシュされるため、2番目の呼び出しは高速である必要がありますが、開発者は定期的にスクリプトとバイナリを更新して新しい検証を実行できます(キャッシュはinodeベースのように見えるため、更新 - 内部保存を使用すると新しいチェックが実行されます。 )、またはスクリプトを動的に生成して実行するワークフローがある可能性があります。このワークフローのパフォーマンスは、Appleサーバーの応答性によって異なります。
エディタを介してファイルを変更すると、inodeが修正され再確認されるように見えますが、リダイレクトを添付するとそうではありません。