이 레슨에서는 Linux 시스템에서 새 프로세스가 시작되는 기본 개념을 살펴봅니다. 이 메커니즘을 이해하면 운영 체제의 내부 작동 방식에 대한 통찰력을 얻을 수 있습니다.
Fork 및 Exec 모델
Linux 에서 프로세스를 생성하는 주요 메커니즘은 기존 프로세스가 fork 시스템 호출을 사용하여 자신을 복제하는 것입니다. fork 호출은 거의 동일한 자식 프로세스를 생성합니다. 이 새 자식 프로세스는 고유한 프로세스 ID(PID) 를 받으며, 원본 프로세스는 부모가 되어 부모 프로세스 ID(PPID) 로 식별됩니다.
포크 후, 자식 프로세스는 부모와 동일한 프로그램을 계속 실행하거나, 더 일반적으로 execve 시스템 호출을 사용하여 새 프로그램을 로드하고 실행할 수 있습니다. execve 호출은 프로세스의 메모리 공간을 새 프로그램의 메모리 공간으로 효과적으로 대체하여 다른 작업을 시작할 수 있게 합니다. 이 두 단계의 "fork-exec" 모델은 Linux 에서 프로세스를 생성하는 방법의 초석입니다.
부모 - 자식 관계 관찰
ps 명령을 사용하여 이 부모 - 자식 관계가 작동하는 것을 관찰할 수 있습니다.
ps l
l 옵션은 실행 중인 프로세스에 대한 자세한 정보를 보여주는 "긴 형식" 보기를 제공합니다. PPID라고 표시된 열이 표시되며, 이는 부모 프로세스 ID 를 나타냅니다. 현재 셸 (예: bash) 의 프로세스를 살펴보십시오. ps l 명령을 실행하면 셸 프로세스의 PID가 ps l 프로세스의 PPID와 일치하는 것을 알 수 있습니다. 이는 셸이 ps 프로세스를 생성하기 위해 자신을 포크했기 때문입니다.
Init 프로세스
모든 프로세스가 다른 프로세스의 자식이라면, 최초의 조상이 있어야 합니다. 이것이 바로 init 프로세스입니다. 시스템이 부팅될 때 커널은 init을 최초의 사용자 공간 프로세스로 생성하고 PID 1 을 할당합니다. init 프로세스는 다른 모든 프로세스의 궁극적인 부모이며 시스템 관리를 위해 루트 권한으로 실행됩니다. 시스템이 종료될 때까지 종료될 수 없으며 시스템을 계속 실행하는 데 필요한 많은 서비스를 생성할 책임이 있습니다.