You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Win32API中通过子进程p_2终止另一个子进程p_1?

解决p_2终止p_1的问题

要让p_2能终止p_1,核心是让p_2获取到p_1的有效进程标识(句柄或进程ID),并拥有终止权限。以下是具体修正步骤:

一、修正父进程的进程创建与句柄传递逻辑

你之前的DuplicateHandle调用参数错误,同时需要把p_1的进程ID传递给p_2,方便p_2定位目标进程:

case WM_LBUTTONDOWN:
{
    STARTUPINFO si = { 0, };
    PROCESS_INFORMATION pi1 = {0}, pi2 = {0};
    WCHAR notepad[32] = L"C:\\Windows\\notepad.exe";
    // 给p_2的命令行附加p_1的进程ID
    WCHAR wndproc[128] = L"WindowProject.exe ";
    WCHAR pidStr[32] = {0};

    // 创建p_1,默认返回的进程句柄已包含终止权限
    if (CreateProcess(NULL, notepad, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi1))
    {   
        // 把p_1的进程ID转为字符串,拼入p_2的命令行
        swprintf_s(pidStr, L"%lu", pi1.dwProcessId);
        wcscat_s(wndproc, pidStr);

        // 创建携带参数的p_2
        CreateProcess(NULL, wndproc, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi2);

        // 父进程及时关闭不需要的句柄,避免资源泄漏
        CloseHandle(pi1.hThread);
        CloseHandle(pi2.hThread);
        CloseHandle(pi1.hProcess);
        CloseHandle(pi2.hProcess);
    } 
}
break;

二、在p_2进程中实现终止逻辑

因为p_2是父进程的克隆(WindowProject.exe),需要在它的代码中添加解析参数、终止p_1的逻辑:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 解析命令行参数,提取p_1的进程ID
    wchar_t* cmdLine = GetCommandLineW();
    int argc = 0;
    wchar_t** argv = CommandLineToArgvW(cmdLine, &argc);
    if (argc >= 2)
    {
        DWORD p1PID = wcstoul(argv[1], NULL, 10);
        if (p1PID != 0)
        {
            // 打开p_1进程,仅申请终止权限
            HANDLE hP1 = OpenProcess(PROCESS_TERMINATE, FALSE, p1PID);
            if (hP1 != NULL)
            {
                TerminateProcess(hP1, 0);
                CloseHandle(hP1);
            }
        }
        LocalFree(argv);
    }

    // 原有窗口逻辑...
}

三、常见问题排查

  • OpenProcess调用失败:如果p_1和p_2的权限等级不一致(比如p_1是管理员权限,p_2是普通权限),会导致打开失败,需确保两个进程权限一致。
  • 句柄泄漏:父进程创建子进程后,必须关闭返回的hProcess和hThread句柄,避免系统资源耗尽。
  • DuplicateHandle的替代场景:如果一定要用句柄复制,需确保DuplicateHandle的源进程是父进程(GetCurrentProcess()),目标进程是p_2的hProcess,且复制的句柄权限包含PROCESS_TERMINATE。

内容的提问来源于stack exchange,提问作者Peroro321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:45:37