첫번째 사진이 간단한 C 소스 코드고 두번째가 실행 화면입니다.
fork 떠서 프로세스를 하나 더 생성해서 메인, 서브 프로세스 각각 문자열을 복사해서 출력하는게 과제인데
소스 코드 한번 실행해보았는데 메인 프로세스에서 복사한 문자열은 잘 출력되는데
서브 프로세스에서 복사한 문자열은 깨져서 나오네요..
프로세스 간 문자열을 건네주는 방법이 있다고 하셨는데.. 인터넷에 검색해도 나오지 않네요.
이유 알려주실 수 있나요?
욕 처먹을 거 각오하고 올립니다.
프로세스간 통신 방식은 파이프라는게 있습니다 찾아보셔요~
부모와 자식 두 프로세스는 주소 공간을 공유하지 않으므로 당연한 결과임. 그냥 당연히 안되는걸 안된다고 보여주기 위한 예시안 것 같으니까 뭐 되게 고치거나 할 필요는 없을 것 같고, 주소 공간을 공유하지 않는다는 것만 이해하면 됨
메모장 창을 두 개 띄워놨을 때 1번 창에 a를 입력한다고 해서 2번 창에도 a가 똑같이 입력되는 게 아닌거랑 마찬가지. fork로 자식 프로세스를 만들었을 때, 부모 프로세스와 자식 프로세스는 동일한 이미지(image, 실행파일)를 가지고 있지만 별도의 프로세스이므로 주소 공간(address space)을 공유하지 않는다.
관념적으로는 fork를 실행하는 순간 프로그램의 수행상태 (변수 등 메모리 공간을 포함) 자체가 2개로 복사돼서 부모와 자식 양쪽으로 나눠진다고 생각하면 됨. 실제로는 *nix 계열 운영체제를 기준으로 말하면 copy-on-write 등 운영체제가 효율성을 위해 이것저것 관여하는 부분이 있어서 fork 하는 순간 복사가 되는건 아니긴 한데 그냥 저렇게 알아두면 된다