문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 포크(동음이의어) (문단 편집) === [[유닉스]]의 함수 Fork() === {{{#!syntax cpp #include int main(void) { pid_t pid = fork(); if (pid == -1) { fprintf(stderr, "Failed to create a process!\n"); exit(-1); } else if(pid == 0) ChildProcess(); else ParentProcess(); return 0; } }}} [[프로세스]]의 생성을 위한 시스템 호출 함수중 하나로, 현재 수행중인 프로세스와 동일한 일을 수행하는 프로세스를 복제한다. [[쓰레드]]랑 다르게 전역 변수를 공유하지 않는다. 단, shared memory같은 경우로 프로세스 간에 변수 공유도 가능하다. 복제 대상을 부모 프로세스, 그 결과물을 자식 프로세스라고 한다. 이때 fork()함수의 반환값에서 부모와 자식을 구별할 수 있는데, 자식은 0을 반환받고 부모는 자식의 PID(프로세스 ID)를 반환받는다. 만약 -1이 반환 되었다면 fork() 함수가 실패한 경우다. 다른 명령을 수행하기 위해서 exec같은 추가적인 코드가 수행되곤 한다. 한 프로세스에서 무한히 생성하다간 시스템에 프로세스의 정보를 저장하는 공간이 바닥나 시스템에 장애를 일으키므로~~암세포~~ 대개 OS차원에서 수를 제한한다. 이걸 악용한 공격방법이 있는데 fork bomb이라 한다. 윈도우에는 이 fork 함수가 없다. 유닉스, 리눅스 시스템용 코드를 윈도우로 옮길 때, 가장 애 먹는 부분중의 하나. CreateProcess 함수로 다 바꿔주어야 한다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기