HANDLE job = CreateJobObject(NULL, NULL);
if (!job) ...
JOBOBJECT_BASIC_LIMIT_INFORMATION jobLimit = { };
jobLimit.LimitFlags = JOB_OBJECT_LIMIT_ACTIVE_PROCESS;
jobLimit.ActiveProcessLimit = 1;
if(! SetInformationJobObject(job, JobObjectBasicLimitInformation, &jobLimit, sizeof(jobLimit)) ) ...
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
if(! CreateProcess(0, yourcommand, 0, 0, FALSE, CREATE_SUSPENDED | CREATE_BREAKAWAY_FROM_JOB , 0, 0, &si, &pi) ) ...
if(! AssignProcessToJobObject(job, pi.hProcess) ) ...
ResumeThread(pi.hThread);
WaitForSingleObject(pi.hProcess, INFINITE); //Normally you would wait on the job, but since there can only be one process this is ok
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(job);