Windows如何创建子进程

2025-11-06 10:52:48

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.(存储子进程的进程句柄和线程句柄)

Windows如何创建子进程

2、参数:lpStartupInfo

功能:定义子进程的窗口属性信息。

类型:STARTUPINFO

Windows如何创建子进程

3、参数:lpProcessInformation

功能:获取子进程的进程句柄,线程句柄

目的:通过进程句柄,可以监控子进程的运行状态。

类型:PROCESS_INFORMATION

Windows如何创建子进程

4、父进程代码实现

功能:创建子进程,并监控子进程的退出状态,等待其运行结束。

注意:需要关闭子进程的进程句柄,和线程句柄。

          需要对si, pi进行内存初始化。

Windows如何创建子进程

5、子进程代码实现

功能:创建一个进程实例,控制台程序。

Windows如何创建子进程

6、测试OK

Windows如何创建子进程

Windows如何创建子进程

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;

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢