Windows如何创建子进程
1、创建子进程的函数定义
注:需要关注的参数,如下所示。
lpApplicationName:
The name of the module to be executed(可执行文件名,全路径)
lpCommandLine:
The command line to be executed.(命令行参数)
dwCreationFlags:
The flags that control the priority class and the creation of the process.(控制子进程的窗口存在形式)
lpProcessInformation:
A pointer to a PROCESS_INFORMATION structure that receives identification information about the new process.(存储子进程的进程句柄和线程句柄)

2、参数:lpStartupInfo
功能:定义子进程的窗口属性信息。
类型:STARTUPINFO

3、参数:lpProcessInformation
功能:获取子进程的进程句柄,线程句柄
目的:通过进程句柄,可以监控子进程的运行状态。
类型:PROCESS_INFORMATION

4、父进程代码实现
功能:创建子进程,并监控子进程的退出状态,等待其运行结束。
注意:需要关闭子进程的进程句柄,和线程句柄。
需要对si, pi进行内存初始化。

5、子进程代码实现
功能:创建一个进程实例,控制台程序。

6、测试OK


7、/************************************************************************/
/* 父进程源码实现 */
/************************************************************************/
#include <Windows.h>
#include <iostream>
#define APPLICATION_NAME L"F:\\temp\\child_demo\\Debug\\child_demo.exe"
int main(){
std::cout << "Welcome to run father process." << std::endl;
// 设置新进程的窗口信息
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
// 接收新进程的标识信息
PROCESS_INFORMATION pi;
memset(&pi, 0, sizeof(pi));
// 创建子进程
BOOL ret = CreateProcess(
APPLICATION_NAME, // 子进程名称(全路径,含扩展名)
NULL, // 命令行参数
NULL, // 不继承父进程的进程句柄
NULL, // 不进程父进程的线程句柄
FALSE, // 句柄继承标识为FALSE
// CREATE_NO_WINDOW -> 新进程,无窗口运行
// CREATE_NEW_CONSOLE -> 新进程,在独立控制台窗口运行。
CREATE_NEW_CONSOLE,
NULL, // 使用父进程的环境
NULL, // 使用父进程的当前目录
&si, // 指向STARTUPINFO
&pi); // 指向PROCESS_INFORMATION
if(!ret){
std::cout << "create process fail!" << std::endl;
return -1;
}
std::cout << "create process success!" << std::endl;
// 等待子进程结束
WaitForSingleObject(pi.hProcess, INFINITE);
std::cout << "child process finish" << std::endl;
// 关闭子进程的进程句柄和线程句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
std::cout << "father process game over!" << std::endl;
return 0;
}