fork 함수로 생성한 자식의 신호처리부는 부모의 것을 물려받는다???

inviolable의 이미지

책 357p 내용 :

fork로 생성된 자식 프로세스는 부모의 신호 처분 설정들을 물려받는다. 이 경우 자식은 부모의 메모리 이미지 복사본을 가지고 실행을 시작하게 되므로, 부모의 신호 처리부 주소는 자식에게도 유효하다.

라고 되어있는데요... 부모와 자식 프로세스의 메모리 영역은 다른데 가지고 있는 함수의 주소는 같을 수 있나요??? 이 부분이 이해가 잘 안갑니다...

익명 사용자의 이미지

fork() 전후의 함수의 주소를 찍어보시기 바랍니다.

    printf("func address=%p\n", func);

같은 식으로요. 이런 식으로 조사해 본 후에 궁금한 점이 있으면, 다시 한번 질문해 보세요^^;;
inviolable의 이미지

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
 
void func()
{
	printf("It is in func\n");
}
 
main()
{
	signal(3,func);
	printf("func address = %p\n", func);
 
	if(fork() == 0)
	{
		printf("func address = %p\n", func);
	}
}
 
func address = 0x8048464
func address = 0x8048464

신호 처리부 주소는 같군요...

흠... 텍스트 영역은 공유하기 때문일 것 같은데 맞나요???

inviolable의 이미지

한번 더 노출시켜보고 그다지 중요하지 않은 내용이면 넘어가겠습니다...

익명 사용자의 이미지

텍스트 영역을 공유하기 때문인 것도 맞지만, fork 직후에는 텍스트 영역이든 데이터 영역이든 두 프로세스가 같은 주소에 같은 메모리 스냅샷을 가지고 있기 때문에 같을 수 밖에 없습니다. 서로 다른 프로세스인데 어떻게 같은 주소에 있을 수가 있느냐? 하는 것은 virtual/physical address space의 차이점을 공부하시면 알 수 있습니다.

inviolable의 이미지

winapi를 공부할 때 들어본적이 있습니다. 답변 감사합니다. 이해되었습니다.