, . , .
WINDOWS . CreateProcess , :
BOOL CreateProcess(LPCTSTR pNameModule, LPCTSTR pCommandLine,
LPSECURITY_ATTRIBUTES pProcessAttr,
LPSECURITY_ATTRIBUTES pThreadAttr, BOOL InheritFlag,
DWORD CreateFlag, LPVOID penv, LPCTSTR pCurrDir,
LPSTARTUPINFO pstartinfo,
LPROCESS_INFORMATION pProcInfo);
LPCTSTR ( FLAT) , DWORD LONG.
pProcessAttr, pThreadAttr Windows NT , NULL.
pNameModule ( .EXE), pCommandLine . , .
InheritFlag ( FALSE).
pCurrDir , , NULL.
penv , , NULL.
CreateFlag . NORMAL_PRIORITY_CLASS.
. pstartinfo () 18 , . . PROCESS_INFORMATION, , . :
Typedef struct
{HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessID;
DWORD dwThread;
} PROCESS_INFORMATION;
hProcess, , dwProcessID, ( ) .
CreateProcess BOOL , . TRUE, FALSE, . #include windows.h.
|
|
, Parent.cpp Child.cpp .
Parent.cpp
#include <windows.h>
#include <stdio.h>
DWORD CreationFlags;
int main()
{ int k;
DWORD rc;
STARTUPINFO si;
PROCESS_INFORMATION pi;
printf(Demonstration processes, Main Process\n);
memset(&si,0,sizeof(STARTUPINFO));
si.cb=sizeof(si);
CreationFlags=NORMAL_PRIORITY_CLASS;
rc=CreateProcess(NULL,child.exe,NULL,NULL,FALSE,
CreationFlags,NULL,NULL,&si,&pi);
if (!rc)
{ printf(Error in creation process, codeError=%ld\n,GetLastError());
getch();return(0);}
printf(For Child Process:\n);
printf(hProcess=%d,hThread=%d,ProcessID=%ld,ThreadID=%ld,
pi.hProcess,pi.hThread,pi.dwProcessID,dwThreadID);
for (k=0;k<10;k++)
{ printf(I am Parent...(my k=%d)\n,k); Sleep(2000);
CloseHandle(pi.hProcess);CloseHandle(pi.hThread);
Return 0);
}
Child.cpp
#include <stdio.h>
#include <windows.h>
int main()
{ int k;
printf(Demonstration Process, Child Process\n);
for (k=0;k<30;k++)
{ printf(I am Child... (k=%d)\n\r,k); Sleep(1000); }
return 0;
}
CloseHandle(). , ( ).
. Windows TerminateProcess(), :
BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode)
hProcess , , uExitCode .
( )
VOID ExitProcess(UINT uExitCode),
, exit() .
:
1. MS Windows.
2. .
7