
Estoy usando macOS conSORBOactivado. Y estoy averiguando por qué los scripts se ejecutan tan lentamente con el SIP después de una modificación o creación.
Y descubrí que si modifico un script con editores como vim o nano y lo ejecuto con ./script.bash
, me tomará aproximadamente 1 segundo finalizar el script por primera vez después de cada modificación.
Por ejemplo. Si el script.bash es:
#!/bin/bash
echo 1
Y lo cambio a continuación por vim
. Me lleva unas diez veces más tiempo ejecutarlo.
#!/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
Mientras que si actualmente agrego el archivo mediante la redirección de salida de algún comando como echo "echo 3" >> script.bash
y sigo llamando al script mediante ./script.bash
, la demora desaparece.
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
Entonces, ¿cuál es la diferencia entre las dos formas de escribir un archivo? ¿Y por qué el retraso ocurre sólo conSORBO¿activado?
Respuesta1
encontréEste artículolo que creo que explica su problema.
Apple ha introducido la certificación notarial, dejando de lado los inconvenientes que esto nos trae a los desarrolladores, también resulta en una experiencia de usuario degradada, ya que la primera vez que un usuario ejecuta un nuevo ejecutable, Apple retrasa la ejecución mientras espera una respuesta de su servidor. Esta verificación para mí toma cerca de un segundo.
Esto no es sólo para archivos descargados de Internet, ni sólo cuando los inicia a través de Finder, esto lo es todo. Entonces, incluso si escribe un script de shell de una línea y lo ejecuta en una terminal, ¡obtendrá un retraso!
En cuanto a la verificación de certificación notarial, el resultado se almacena en caché, por lo que la segunda invocación debería ser rápida, pero si es desarrollador, puede actualizar sus scripts y binarios con regularidad, lo que desencadena nuevas comprobaciones (parece que el almacenamiento en caché se basa en inodo, por lo que una actualización (guardar en el lugar puede evitar activar una nueva verificación), o puede tener flujos de trabajo que implican la creación y ejecución dinámica de scripts, cuyo rendimiento ahora depende de la capacidad de respuesta de los servidores de Apple.
Parece que modificar el archivo a través de un editor modifica el inodo, lo que hace que se verifique nuevamente, pero agregarlo con una redirección no lo hace.