
Estou usando o macOS comtragohabilitado. E estou descobrindo por que os scripts são executados tão lentamente com o SIP após uma modificação ou criação.
E descobri que se eu modificar um script por editores como vim ou nano e executá-lo ./script.bash
, levará cerca de 1 segundo para terminar o script pela primeira vez após cada modificação.
Por exemplo. Se o script.bash for:
#!/bin/bash
echo 1
E eu mudo para abaixo por vim
. Demoro cerca de dez vezes mais tempo para executá-lo.
#!/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
Embora se eu atualmente anexar o arquivo por algum redirecionamento de saída de comando echo "echo 3" >> script.bash
e ainda chamar o script por ./script.bash
, o atraso desaparecerá.
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
Então, qual é a diferença entre as duas maneiras de escrever um arquivo? E por que o atraso acontece apenas comtragohabilitado?
Responder1
eu encontreiEste artigoo que acredito explica seu problema.
A Apple introduziu o reconhecimento de firma, deixando de lado o inconveniente que isso traz para nós, desenvolvedores, mas também resulta em uma experiência de usuário degradada, pois na primeira vez que um usuário executa um novo executável, a Apple atrasa a execução enquanto aguarda uma resposta de seu servidor. Essa verificação para mim leva quase um segundo.
Isso não se aplica apenas aos arquivos baixados da internet, nem apenas quando você os inicia via Finder, isso é tudo. Portanto, mesmo se você escrever um script de shell de uma linha e executá-lo em um terminal, ocorrerá um atraso!
Quanto à verificação de reconhecimento de firma, o resultado é armazenado em cache, portanto a segunda invocação deve ser rápida, mas se você for um desenvolvedor, poderá atualizar seus scripts e binários regularmente, o que aciona novas verificações (parece que o cache é baseado em inode, portanto, uma atualização -salvar no local pode evitar o acionamento de uma nova verificação) ou você pode ter fluxos de trabalho que envolvem a criação e execução dinâmica de scripts, cujo desempenho agora depende da capacidade de resposta dos servidores da Apple.
Parece que modificar o arquivo através de um editor modifica o inode, fazendo com que ele seja verificado novamente, mas anexá-lo com um redirecionamento não.