#include<Windows.h>
#include<stdio.h>
DWORD CreateChildProcess(LPSTR szChildProcessCmd);
//这里对参数
int main()
{
HANDLE hMainProcess;
hMainProcess = GetCurrentProcess();
printf("GetProcessId(hMainProcess):%d\n",GetProcessId(hMainProcess));
printf("GetProcessIdOfThread(hMainProcess):%d\n",GetProcessIdOfThread(hMainProcess));
printf("GetProcessVersion():%d\n",GetProcessVersion(GetProcessId(hMainProcess)));
printf("主进程调用子进程前\n");
CreateChildProcess("Child.exe");
printf("主进程调用子进程后\n");
system("pause");
return 0;
}
//参数:LPSTR szChildProcessCmd 启动子进程的命令行
//返回值:成功返回0 失败返回1
DWORD CreateChildProcess(LPSTR szChildProcessCmd)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
//将启动信息结构清零
ZeroMemory(&si,sizeof(si));
//设置结构大小
si.cb = sizeof(si);
//将进程信息结构清零
ZeroMemory(&pi,sizeof(pi));
//创建子进程并判断是否成功
if(!CreateProcess(
NULL, //指向应用程序,若为空 则命令行不能为空
szChildProcessCmd,//命令行
NULL, //不继承进程句柄
NULL, //不继承线程句柄
FALSE, //不继承句柄
0, //没有创建标志
NULL, //使用父进程环境变量
NULL, //使用父进程目录作为当前目录
&si, //STARTUPINFO结构
&pi //PROCESS_INFORMATION结构 用于保存相关信息
))
{
//创建失败
printf("Create Process Failed:%d\n",GetLastError());
return 1;
}
//创建成功后父进程会默认直接退出 这里等待子进程执行结束
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
以下是子进程函数
#include<windows.h>
#include<stdio.h>
int main()
{
HANDLE hChildProcess;
HANDLE hChildThread;
printf("this is a child process\n");
hChildProcess = GetCurrentProcess();
//这里简单获取子进程的相关信息
printf("GetProcessId(hChildProcess):%d\n",GetProcessId(hChildProcess));
printf("GetProcessIdOfThread(hChildProcess):%d\n",GetProcessIdOfThread(hChildProcess));
printf("GetProcessVersion():%d\n",GetProcessVersion(GetProcessId(hChildProcess)));
//获取线程ID
hChildThread=GetCurrentThread();
printf("GetThreadId(hChildThread):%d\n",GetThreadId(hChildThread));
printf("子进程结束\n");
//子进程执行到这里会等待输入 主进程等待
getchar();
return 0;
}