Какой самый простой способ дублировать текущий процесс, чтобы вызвать другой экземпляр в Windows? Я знаю, что Linux имеет fork()
, но все, что мне нужно, это снова запустить main в том же процессе, вероятно, используя CreateProcess()
с правильными аргументами.
Как заметил @DavidHeffernan:
STARTUPINFO si;
::memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
::CreateProcess(NULL, ::GetCommandLine(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
Cygwin реализует fork()
в управляемой среде, но даже это сложный танец в квадрате, заставляющий ребенка догонять родителя, чтобы точно копировать поведение POSIX.
Кажется, вам не нужно подражать fork()
, но fork()
/exec()
, Для этого нужно собрать переменные среды, параметры программы и передать их CreateProcess()
должно быть достаточно. Есть варианты, чтобы скопировать файловые дескрипторы на ребенка тоже. Увидеть CreateProcess
«s документация.