Windows/Windows Programming

자식 프로세스

MOLOKINI 2016. 4. 9. 12:12

자식 프로세스는 현재 수행중이던 프로세스에서 새로운 프로세스를 실행시키는 것을 말합니다.

 

예를들어 아래 그림을 보면......

explorer.exe 아래 KakaoTalk.exe, PotPlayerMini.exe, Procexp.exe 등등이 수행되고 있음을 알 수 있는데요

바로 explorer.exe가 부모 프로세스

그 explorer.exe가 실행시킨 KakaoTalk.exe, PotPlayerMini.exe, Procexp.exe들이 자식 프로세스라고 볼 수 있습니다.

여기서 부모/자식간의 연관관계와 독립관계가 있는데요.

- 연관관계 : procexp.exe => procexp64.exe

- 독립관계 : explorer.exe => 하위 자식 프로세스들

 

연관관계와 독립관계는 프로세스간 공유하는 자료가 있고 서로 자료를 주고받는지 생성/종료에 따라 연관을 갖고 동작하는지에 따라 분류되게 됩니다.

 

이렇게 자식 프로세스를 만들어서 수행시키는 이유는

멀티 태스킹 작업을 수행할 때 이점을 얻을 수 있기 때문입니다.

한 프로세스 내에서 새로운 스레드를 수행시켜서도 구현 가능하지만 필요에 따라 새로운 프로세스를 생성하는게 동기화 이슈들을 비롯한 이 있을 수 있습니다.

 - 모든 경우에 자식 프로세스를 생성하는게 옳다는 이야기는 아닙니다! 상황에 따라서 알맞게!

 

위 그림 같은 경우에는 부모 프로세스인 explorer.exe와 하위에 있는 자식 프로세스들이 독립적인 관계이지만 procexp.exe의 자식 프로세스인 procexp64.exe는 서로 자료를 주고 받으며 수행되는 부모/자식 관계입니다.

 

부모/자식 프로세스간에는 하나의 프로세스에서 수행되는 것이 아니기 때문에 서로 메모리 주소 공간이 각각 별도로 존재하게 됩니다.

이런 경우에는 부모 프로세스의 자료를 자식 프로세스가 참조할 수 있도록 해주어야 하는데요.

이럴 때 사용되는 것들이 DDE, OLE, 파이프, 메일슬롯, 메모리 맵 파일 등등의 방법으로 자료를 전송할 수 있도록 해줍니다. (이것들은 나중에.. 포스팅하겠습니다.)

 

어떤 프로세스에서 새로운 프로세스를 생성하고 결과를 기다리는 코드를 작성한다고하면 아래와 같이 작성할 수도 있습니다.

 

 

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx

 

위 코드에 대해서 설명을 드리자면..

CreateProcess 함수는 이전 포스팅을 참고! 새로운 프로세스를 생성하는 함수입니다.,

 - 프로세스의 생성 1 : http://wonjayk.tistory.com/277

 - 프로세스의 생성 2 : http://wonjayk.tistory.com/278