프로세스의 생성과 복사 그리고 종료의 과정은 Window와 Unix가 차이를 갖고 있다.
Window
- 프로세스의 생성과 복사 & 종료 과정
- 현재 내가 돌리려는 코드가 있다고하면 그 코드를 부모 프로세스라 하자.
- CreateProcess를 통해 Excel파일을 부른다
- 여기서 Excel은 자식 프로세스가 된다.
- 동시에 부모 프로세스는 바로 밑에서 Infinite하게 Wait하고 있을 것이다.
- 여기서 자식 프로세스가 ExitProcess() 시그널을 보내면 자식 프로세스는 종료 되고 부모 프로세스는 Wait상태에서 Running상태가 될 것이다.
Linux
- Linux는 생성 과정에서 fork와 exec 2가지로 나뉜다.
- fork의 경우 자식 프로세스를 생성할 때 부모 프로세스가 대기 상태에 들어가는 것이 아닌 같이 실행되는 구조를 가지고 있고, 자식과 부모의 가상 메모리가 동시에 존재해 추가적인 작업들이 필요하다.
- exec의 경우 자식 프로세스를 생성할 때 부모 프로세스가 대기 상태에 들어가고, 부모 프로세스의 가상메모리 공간을 가져다 쓰기 때문에 새로운 가상메모리 공간 생성이나 기존 공간 삭제 등, 다양한 후처리 작업들을 줄여, 효율성을 가져올 수 있게해 준다.
- 프로세스 생성과 복사 & 종료 과정
- fork()를 통해 새로운 프로세스를 만든다.
- 새로운 프로세스는 자식 프로세스라 부르고, 오리지널 프로세스는 부모 프로세스로 새로운 프로세스가 해당 부모 프로세스의 주소 공간을 복사하고 있다.
- 자식 프로세스는 실행 됨과 동시에 부모 프로세스는 함께 실행되고 있다.
(윈도우와 차이점)
- execl()를 통해 부모 프로세스를 대기 상태로 만들어 윈도우와 비슷하게 작동하게 할 수도 있다.
- 자식 프로세스가 exit() 시그널을 보내면, 자식 프로세스는 종료 되고, 부모 프로세스가 Wait상태에 있는 경우 부모 프로세스를 다시 실행시킨다.
💡Window vs Linux (command)