ls
실행을 위해 별도의 프로세스 가 필요한 이유는 무엇 입니까? cd
포크 메커니즘으로 같은 명령을 실행할 수없는 이유를 알고 있지만 ls
포크없이 실행 하면 해 가 될까요?
대답은 다소간 ls
외부 실행 파일입니다. 를 실행하여 위치를 볼 수 있습니다 type -p ls
.
ls
그렇다면 왜 쉘에 내장 되지 않습니까? 글쎄, 왜 그래야 하는가? 쉘의 역할은 사용 가능한 모든 명령을 포함하는 것이 아니라 명령을 실행할 수있는 환경을 제공하는 것입니다. 일부 최신 셸에는 echo
, printf
및 ilk가 내장 되어 있으며, 기술적 으로 내장 할 필요는 없지만 반복적으로 실행될 때 성능상의 이유로 만들어집니다 (주로 타이트 루프에서). 그것들을 빌트인으로 만들지 않으면, 쉘은 그들에 대한 각 호출에 대해 새로운 프로세스를 포크하고 실행해야하는데, 이는 매우 느릴 수 있습니다.
최소한 ls
외부 실행 파일 인을 실행하려면 시스템 호출의 exec 계열 중 하나를 실행해야합니다. 당신은 수 분기없이이 작업을 수행하지만, 당신이 사용하는 것을 기본 쉘을 대체 할 것이다. 다음을 수행하여 해당 인스턴스에서 어떤 일이 발생하는지 확인할 수 있습니다.
exec ls; echo "this never gets printed"
셸의 프로세스 이미지가 교체되었으므로이 작업을 수행 한 후에는 현재 셸에 더 이상 액세스 할 수 없습니다. ls를 실행 한 후에도 쉘을 계속 실행할 수 있으려면 명령이 쉘에 빌드되어야합니다.
Forking을 사용하면 기본 셸이 아닌 프로세스를 교체 할 수 있습니다. 즉, 나중에 셸을 계속 실행할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다