Linux 시스템에서 프로그램이나 bash 쉘 명령은 정확히 어떻게 작동합니까?

Linux 시스템에서 프로그램이나 bash 쉘 명령은 정확히 어떻게 작동합니까?

저는 Linux 시스템에서 프로세스와 셸이 어떻게 작동하는지 연구하고 있습니다. 내 결론이 맞는지 확인해 보시길 바랍니다.

시스템을 부팅하면 커널은 init 프로세스를 시작하고 다른 모든 프로세스는 이 프로세스의 포크를 통해 하위 프로세스로 실행됩니다. 예를 들어, 프로그램을 실행할 때 상위 프로세스는 프로그램에서 분기되고, 분기된 프로세스는 exec를 사용하여 프로그램을 실행하는 하위 프로세스(또는 하위 프로세스)가 됩니다. 예를 들어, bash 쉘을 실행하면 상위 프로세스가 분기되고 exec는 분기된 프로세스가 bash 프로그램이 실행될 하위 프로세스가 되도록 만듭니다. 이 시점에서 나는 bash 쉘에 입력한 명령이 어떻게 실행되는지 혼란스러워졌습니다. 내장 및 외부 명령은 어떻게 전달됩니까? 예를 들어, 내장 포크가 있거나 이에 대한 하위 프로세스를 생성합니까?

답변1

귀하가 요청한 질문은 Gnu/Linux뿐만 아니라 모든 Unix에 적용됩니다.

forka 이후에는 실행할 필요가 없다는 점에 유의해야 합니다 . 따라서 쉘 내장의 경우 쉘은 내장 명령을 분기한 후 실행합니다.

쉘은 또한 서브쉘을 생성합니다. 쉘은 필요하지 않을 때(예: 간단한 내장 명령의 경우) 분기되지 않습니다. 여기서 simple은 파이프라인에 포함되지 않습니다.

귀하의 질문에 언급되지 않은 파이프도 있습니다. 이는 포크 이전에 생성되지만 fork선택적으로 전후에 연결됩니다(내장 참조) exec.

관련 정보