05-18 21:40
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

fork 와 exec의 차이 본문

카테고리 없음

fork 와 exec의 차이

벤치마킹 2011. 8. 17. 00:03
fork 와 exec 차이 비공개  낙서장 

2011/07/29 13:30  수정  삭제

복사http://blog.naver.com/adngjun/140135287218

fork()나 exec() 모두 한 프로세스가 다른 프로세스를 실행시키기 위해 사용하는 시스템

호출이다

 두 함수의 차이점은 우선 fork() 시스템 호출은 새로운 프로세스를 위한 메모리를 할당한다.     그리고, fork()를 호출한 프로세스를 새로운 공간으로 전부 복사한다. 그리고 나서 원래 프로세스는 원래 프로세스대로 실행되고, fork()를 이용해서 생성된 프로세스도 그 나름대로 fork() 시스템 콜이 수행된 라인의 다음 라인부터 실행이 된다. 

(새로 생성된 프로세스는 원래의 프로세스랑 똑같은 코드를 가지고 있다.)


exec()를 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌워 버린다.

반면, exec() 시스템 콜은 fork()처럼 새로운 프로세스를 위한 메모리를 할당하지 않고,

따라서 exec()를 호출한 프로세스가 아닌 exec()에 의해 호출된 프로세스만 메모리에 남게된다.


child process 의 code, data 영역에 들어 가는 내용은 parent process의 내용을 copy 해 오는 것 linux에서는 COW(Copy-On-Write) 라고 해서 child process 에서 write 가 수행될 때 parent 의 data,code 의 내용을 copy 해 오는 방식을 사용하고 있습니다.


다시 간단하게 말하면, fork() 의 결과는 프로세스가 하나 더 생기는 것이다.

물론, 프로세스 id (pid) 도 완전히 다른 또 하나의 프로세스가 생기는 것이다.


  호출한 프로세스는 새로운 프로세스에 의해 덮어 쓰여지게 된다반면, exec() 실행의 결과로 생성되는 새로운 프로세스는 없다. exec() 를 호출한 프로세스의 pid 가 그대로 새로운 프로세스에 적용이 되며, exec()를 호출한 프로세스는 새로운 프로세스에 의해 덮어 쓰여지게 된다.

출처:

http://okkim.tistory.com/35


 결국  정리 하자면 fork 는 복사 해서 process를 하나 만든 다는 얘기고 exec는 만들어서 자신위에 덮어 쓴다는 말인듯. 현업에서는 fork를 많이 쓰고 watch dog의 경우에는 보통 fork를 2번씩 해서 원래 부모를 죽여서 사용 (이유는 부모가 좀비 process가 될 수도 있기 때문) 

이유가 중요한듯  


A->B( A 죽임)->A 


A는 original  process

B는 watch dog process

Comments