2012-09-30 21 views
1

複製當前進程以在Windows中產生另一個實例的最簡單方法是什麼?我知道Linux有fork(),但我需要的只是在同一個進程中再次運行main,可能使用CreateProcess()以及正確的參數。如何複製當前進程?

+1

'system(argv [0])'? :D(如果我的意圖是正確的。) – Xeo

+0

如果我從'WinMain'運行怎麼辦?我可以簡單地拆分'lpCmdLine'並運行'system',還是我需要在控制檯子系統中?不,意識到它不會工作,因爲我不希望任何控制檯窗口出現。 –

+3

調用'GetCommandLine'並將其傳遞給'CreateProcess' –

回答

1

由於@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); 
0

Cygwin implements fork()其管理的環境中,但即使是在讓孩子趕上家長準確地複製POSIX行爲的複雜的廣場舞。

看起來你不需要效仿fork(),而是fork()/exec()。爲此,收集環境變量,程序參數並將它們傳遞給CreateProcess()應該足夠了。有一些選項可以將文件描述符複製到孩子身上。見CreateProcessdocumentation

相關問題