저는 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
그렇다면 파일을 작성하는 두 가지 방법의 차이점은 무엇입니까? 왜 지연은 다음에서만 발생합니까?한모금할 수 있게 하다?
답변1
내가 찾은이 기사나는 이것이 당신의 문제를 설명한다고 믿습니다.
Apple은 공증을 도입했으며 이로 인해 개발자에게 불편을 끼쳤을 뿐만 아니라 사용자가 처음으로 새 실행 파일을 실행할 때 Apple이 서버의 응답을 기다리는 동안 실행을 지연시켰기 때문에 사용자 경험도 저하되었습니다. 나에게 있어 이 확인은 거의 1초 정도 소요된다.
이것은 단지 인터넷에서 다운로드한 파일에만 적용되는 것이 아니며, Finder를 통해 파일을 실행하는 데에만 적용되는 것도 아닙니다. 그게 전부입니다. 따라서 한 줄짜리 셸 스크립트를 작성하여 터미널에서 실행하더라도 지연이 발생합니다!
공증 확인의 경우 결과가 캐시되므로 두 번째 호출은 빨라야 하지만 개발자라면 정기적으로 스크립트와 바이너리를 업데이트하여 새로운 확인을 실행할 수 있습니다(캐시는 inode 기반인 것처럼 보이므로 업데이트- 내부 저장을 사용하면 새 검사가 실행되지 않을 수 있습니다) 또는 스크립트를 동적으로 생성하고 실행하는 작업 흐름이 있을 수 있습니다. 이 작업 흐름의 성능은 이제 Apple 서버의 응답성에 따라 달라집니다.
편집기를 통해 파일을 수정하면 inode가 수정되어 다시 확인하게 되는 것 같지만 리디렉션을 첨부하면 그렇지 않습니다.