tail head cat sleep
QR code linking to this page

Man page  — VFORK

명칭

vfork – 효율적인 방법으로 가상 메모리에 새로운 프로세스를 생성

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <unistd.h>

int
vfork(void);

해설

vfork() 그럼, 낡은 프로세스의 address 공간을 완전하게 카피하지 않고 , 새로운 프로세스를 작성할 수 있습니다. 페이징 하는 환경에서는, 낡은 프로세스의 address 공간을 완전하게 카피하는 것은, 매우 비효율적입니다. fork(2) 하는 목적이, execve(2) (을)를 위한 새로운 시스템 문맥의 작성인 경우에 유효합니다. vfork() (은)는, execve(2) (을)를 호출하는지, 종료한다 ( _exit(2) (을)를 호출하는지 이상종료(ABEND) 한다)까지 아이가 부모의 메모리와 컨트롤의 thread를 빌린다고 하는 점으로, fork(2) (와)과 다릅니다. parent process는, 아이가 리소스를 사용하고 있는 동안 정지됩니다.

vfork() (은)는, 0 을 아이의 문맥에, 그리고 ( 후에) 아이의 pid 를 부모의 문맥에 되돌립니다.

통상의 경우, vfork()fork(2) (와)과 같이 사용할 수 있습니다. 그러나, vfork() (을)를 호출한 프로시저로부터 아이의 문맥으로 동작하고 있는 동안에 동작해 돌아올 것은 없습니다. 최종적으로 vfork() (으)로부터 돌아오면(자), 존재하지 않는 스택 프레임으로 돌아오기 때문입니다. execve(2) (을)를 실행할 수 없는 경우는, exit(3) (이)가 아니고, _exit(2) (을)를 호출해 주세요. exit(3) (은)는 표준 입출력 채널을 플래시 해 닫기 (위해)때문에, parent process의 표준 입출력 데이터 구조 건강을 해쳐 버립니다. ( fork(2) 그렇지만, 버퍼에 들어가 있는 데이터가 2 회 플래시 되므로, exit(3) (을)를 호출하지 말아 주세요. )

관련 항목

execve(2), fork(2), rfork(2), sigvec(2), wait(2), _exit(2), exit(3)

반환값

fork(2) (와)과 같습니다.

버그

이 시스템 콜은, 적절한 시스템 공유 메카니즘 하지만 실현되었을 때에 삭제됩니다. 삭제되었을 경우는, fork(2) (이)라고 동의가 되므로, vfork(2) 의 메모리 공유의 현실장에는 의존하지 말아 주세요.

데드 록을 피하기 (위해)때문에, vfork() 의 도중에 아이가 되는 프로세스에는, SIGTTOU 시그널이나 SIGTTIN 시그널이 송신되지 않습니다. 그 대신에 출력, 또는, ioctl(2) 호출이 허가되어 입력하려고 하면(자) EOF 가 됩니다.

역사

vfork() 함수 호출은, BSD 2.9 그리고 등장했습니다.

VFORK (2) June 4, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.