fork()가 실행될 때 부모 프로세스의 메모리를 자식 프로세스용으로 복사하고 분기된다는데
그러면 자식 프로세스는 부모 프로세스의 내용을 상속받는다는거야?
그리고 이거 fork 실습하고 나서도 이게 도대체 무슨 소리인지 모르겠어
보통 fork의 리턴값에 의해 분기되면
int fork_r = fork();
...
if (!fork_r)
childProcess();
else
parentProcess();
이렇게 되잖아. 그런데 왜 parentProcess() 함수가 호출된 다음에 childProcess() 함수가 같이 호출되는거야?
분기대로 하나만 호출되어야하는거 아니야?
자식 프로세스는 부모랑 완전히 똑같음 다른 거는 fork하는 순간 나오는 pid값 뿐임
더 쉽게 설명하자면 fork()하는 순간 코드가 완전히 똑같은 자식 프로세스가 생기고, 오직 자식 프로세스만 fork()의 결과값으로 0이 리턴되는거
그리고 부모 프로세스의 경우는 fork()의 결과값으로 원래 자신의 pid값이 리턴됨
아 ~~~~~ 그러면 if else 넣은 이유가 지금 실행되고 있는데 자식 프로세스인지 부모 프로세스인지 구별하려고 넣은거구나?
ㅇㅇ 그거임
진짜 ㄳㄳ 댓 읽으니 이해된듯
저거 순서는 뭐가 먼저인지 알수없음 둘다 가능. Race condition이라고 한다
Parent->child일수도 있고 그 반대일수도 있단말
경쟁 상태? 위키 글 한번 읽어볼게 ㄳㄳ
참고로 vfork()라는 것도 있어서 얘는 리눅스 기준으로 자식 프로세스가 먼저 실행되는 것을 보장함
와 ㅋㅋ 이글보고 방금 해봤는데 진짜네 ㅋㅋㅋㅋ
그리고 man 2 fork 명령어 쉘에다 치면 잘 설명해줌
아 ㅋㅋㅋ 정x훈 님이 친절히 설명을 ㅋㅋ
더 자세한 것을 알고싶다면 apue, Advanced Programming in the Unix Environment 3판 사서 보면 정말 좋다. 한 권 있어도 좋은 책임
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.458.2318&rep=rep1&type=pdf
이거? 이따가 함 내용 살펴봐야지 ㄳㄳ
오류나서 모르겠는데 원래 파는 책이니까 사서보는거 추천
메모리는 카피하는데 포크시점에서 카피해서 포크반환값이 자식은 0 부모는 자식id가 됨 - dc App
나글고 ^^ㅣ발 이거 기억안나서 포크결과 자식아이디써서 틀림 흐규흐규 - dc App