Windows如何创建子进程
1、创建子进程的函数定义注:需要关注的参数,如下所示。lpApplicationName:The name of th髫潋啜缅e 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 aPROCESS_INFORMATIONstructure 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;}