프로세스, fork() 사용법에 대한 간단한 도움 좀 부탁드립니다..
아래의 소스와 컴파일 및 실행결과인데요..
pid = fork();
위 문장이 실행되면 프로세스 이미지 복제를 한다고 배웠습니다.
그러니까.. 자식프로세스가 생기는 거죠.
fork로 리턴한 값이 들어있는 0이 있으면 자식프로세스
그 외의 경우 부모프로세스로 알고 있구요.
그 뒤로 결과를 어떻게 해석해야하는지 도저히 모르겠습니다.
제가 예상한 바로는
자식 프로세스가 생성이 됐으면
This is the child
This is the child
This is the child
This is the child
This is the child
출력이
그게 아니라면
This is th parent
This is th parent
This is th parent
출력이 맞다고 생각하는데..
꼭 좀 도움 좀 부탁드립니다.
-------------------------------------------------------------------------------------------
추가적으로 제가 더 공부하면서 추론한 내용인데, 이게 맞는지 모르겠네요.
fork()가 호출되면 프로세스는 두 개가 생깁니다.
부모프로세스와 자식프로세스
리눅스를 우주같은 공간이라고 생각하면 똑같은 프로세스가 두 개 생기는 것이죠.
부모프로세스를 똑같이 복사한 것이 자식프로세스구요.
두 프로세스가 서로 같이 돌아가는 겁니다.
그러면서 사이좋게 커맨드창에
부모프로세스가 puts한 번 출력하고,
자식 프로세스가 puts 한 번 출력하고,
그런데 자식 프로세스 상의 fo문은 5~1번을 돌아야 하기 때문에 2번 정도 더 출력시키는 것이고..
근데 부모/자식이 순서없이 커맨드에 puts(message)를 하니까 정신이 없네요.
그래서 자식이 끝날 때까지 부모가 기다리게 하기 위해 wait라는 함수를 사용할 수도 있고요.
어떻게 이해해보려고 노력한 추론결과인데, 정답에 근접한가요..;;
하나의 표준 출력으로 출력되었을 뿐 별도로 실행되었습니다.
둘다 별도의 프로세스로 실행이 되었으나 하나의 표준 출력 스트림으로 출력이 된 것입니다. 부모 프로세스건 자식 프로세스이건 fork()함수 이후로 별도로 동작을 하였으나, 한 곳으로 출력하였을 뿐입니다. printf 대신에 fprintf로 별도의 파일에 출력하면 각각의 파일이 생긴 것을 알 수 있을 겁니다.
댓글 달기