Unix/Linux에서 프로그램을 실행할 때 뒤에서 정확히 무슨 일이 발생합니까?
프로세스 생성을 담당하는 사람은 누구입니까?
프로세스(내 프로그램의 인스턴스)를 시작하려면 커널을 호출해야 합니까? 이런 의미에서 내 프로그램은 커널 호출을 수행하기 위해 프로세서에서 실행되어야 합니다. 그렇죠? 그렇다면 첫 번째 커널 호출은 어떻게 프로세스를 시작합니까? 막다른 골목에 도달한 것과 같나요? 그렇다면 커널은 어디에 가장 먼저 나타나는가?
죄송합니다. 이 모든 것에 대한 많은 문서를 읽었지만 여전히 점을 연결하거나 전체 그림을 얻을 수 없습니다. 누군가 이것에 대해 간단한 용어로 자세히 설명해 주시겠습니까?
답변1
교착 상태는 완전히 다른 것입니다.
프로세스 생성
전통적으로 Unix에는 프로세스를 생성하는 방법이 있습니다 fork
.
fork
시스템 호출입니다. 기존 프로세스에 의해 호출됩니다. 이는 커널에 대한 호출입니다. 그러면 새로운 프로세스가 생성됩니다. 새 프로세스는 이전 프로세스와 거의 동일하며 두 프로세스 모두 fork
호출에서 반환됩니다.
프로세스 간의 주요 차이점은 다음과 같습니다. 의 반환 값 fork
. 프로세스 ID.
exec
프로세스를 구별하기 위해 시스템/커널 호출도 사용할 수도 있습니다 . 다른 프로그램을 실행하세요.
그럼 어떻게 시작됐나요?
프로세스 1은 커널에 연결되어 있습니다. 둘 다 동시에 로드됩니다. 커널이 이 프로세스를 실행하기 시작합니다. 다른 모든 것은 거기에서 나옵니다. 프로세스는 새로운 프로세스를 만들고, 새로운 프로세스는 나무의 가지처럼 새로운 프로세스를 만듭니다(위 참조).