윈도 플랫폼에서 fork()함수를 사용하는 법

결론부터 말하자면, 그런 거 없다.

fork()함수는 현재 프로세스를 복제하여 자식 프로세스를 하나 더 만들어주는 동작을 한다. 1 이 함수는 일반적으로 자신의 자식 프로세스를 만들고, 이 프로세스에서 다른 프로그램을 호출하는 형태를 취한다. 즉 exec* 함수를 통해 다른 프로세스를 호출하면 해당 프로그램은 (호출에 실패한 케이스가 아니라면) 즉시 종료되므로, 프로세스 자신을 유지한 상태로 다른 프로세스를 호출하기 위해 필요한 함수이다.

그런데, 이 함수는 유닉스 계열에서만 동작하고 윈도 환경에서는 동작하지 않는다. 프로세스를 복제한다는 개념이 윈도의 설계상의 문제로 시스템 차원에서 지원이 되지 않는 것 같다.

따라서 다음 함수들을 사용한다.


BOOL CreateProcess(LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECUREITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirctory, LPSTARTUPINFO lpStartupInfo, LPPROCESS+_INFORMATION lpProcessInformation);

엄청 긴데 -_-; 리눅스는 현재 프로세스의 정보를 쉽게 복제할 수 있는데, 윈도는 이게 안되는 것 같다.

#include <WinBase.h>

STARTUPINFO sinfo;
PROCESS_INFORMATION pinfo;

/* Minimal argument preparations */
ZeroMemory( &sinfo, sizeof(sinfo) );
sinfo.cb = sizeof(sinfo);
ZeroMemory( &pinfo, sizeof(pinfo) );

if (!CreateProcess(L".\\foo.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL,
        &sinfo, &pinfo))
{
        /* Process creation failed */
        return;
}

자세한 정보는 다음 링크 참조


  1. 표준 유닉스 환경에서 사용가능하며, unistd.h 헤더에 선언되어 있다.