找回密码
 立即注册
首页 业界区 业界 Windows编程----结束进程

Windows编程----结束进程

柩通奉 2025-6-2 00:04:56
进程有启动就有终止,通过CreateProcess函数可以启动一个新的子进程,但是如何终结子进程呢?主要有四种方法:
通过主线程的入口函数(main函数、WinMain函数)的return关键字终止进程

一个应用程序只有一个入口函数,对于控制台来说是main函数,对于GUI程序来说这个入口函数一般是WinMain。入口函数通过return关键字返回或者程序自上而下执行完成之后,进程可以自动终止,进程相关的所有资源都会被操作清理。这也是开发中最常用的进程终止方法,也是强烈推荐大家使用的终止进程的方式。
那么如何能获取到子进程的返回值呢,以下面代码为例,这是一个最简单的控制台程序,它返回-3。
  1. #include <iostream>
  2. #include <Windows.h>
  3. int main()
  4. {
  5.         return -3;
  6. }
复制代码
首先演示在cmd控制台或者bat脚本中如何获取该进程的最终返回值:通过echo %errorlevel%命令可以获取到上一个cmd命令的返回值。如下:
1.png
在程序中获取子进程的返回值,CreateProcess函数创建子进程成功之后,主进程可以拿到子进程的句柄。通过调用GetExitCodeProcess函数可以获取到某个进程的返回值,函数原型如下:
  1. BOOL GetExitCodeProcess(
  2.   HANDLE  hProcess,//子进程句柄
  3.   LPDWORD lpExitCode//用于接受子进程的返回值
  4. );
复制代码
请看以下代码:
[code]#include #include int main(){        //即将启动的exe程序路径        LPCWSTR lpApplicationName = L"D:\\project\\ConsoleApp1\\x64\\Debug\\NewApp.exe";        // 定义启动信息和进程信息结构        STARTUPINFOW si;        PROCESS_INFORMATION pi;        // 初始化启动信息结构        ZeroMemory(&si, sizeof(si));        si.cb = sizeof(si);        ZeroMemory(&pi, sizeof(pi));        BOOL ret = CreateProcess(lpApplicationName,                NULL,                NULL,                NULL,                FALSE,                CREATE_NEW_CONSOLE,                NULL,                NULL,                &si,                &pi);        // 等待进程结束        WaitForSingleObject(pi.hProcess, INFINITE);        // 获取子进程的返回值        DWORD exitCode;        GetExitCodeProcess(pi.hProcess, &exitCode);        // 将无符号整数转换为有符号整数        int signedExitCode = static_cast(exitCode);        std::cout
您需要登录后才可以回帖 登录 | 立即注册