c++线程,如何杀死主程序?

//   
//  CopyRight(c) 2009, YOYO, All Rights Reserved.   
//  Author: LIN YiQian   
//  Created: 2009/09/16   
//  Describe: 子线程杀死主线程 演示   
//   
#include <Windows.h>   
#include <iostream>   
using namespace std;

DWORD WINAPI ThreadFun(LPVOID lpParameter);

void main(void)
{
    HANDLE hMainThread;

    DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(),
        &hMainThread, 0, FALSE, DUPLICATE_SAME_ACCESS);

    HANDLE hThread = CreateThread(NULL, 0, ThreadFun, &hMainThread, 0, NULL);

    while (true)
    {
        printf("主线程运行中 - -..\n");
        Sleep(1000);
    }

    CloseHandle(hThread);

    return;
}

DWORD WINAPI ThreadFun(LPVOID lpParameter)
{
    HANDLE hMainThread = *((HANDLE*)lpParameter);
    
    //TerminateThread(hMainThread, 0);

    while (true)
    {
        cout << hMainThread << endl;
        printf("子线程运行中。。\n");
        Sleep(5000);
    }
}

上面是我网上找的一段代码。是子线程,杀死主线程的,

我想要的是子线程能,杀死程序自己,
我是写在库里面,然后库注入到xxx.exe,
希望能实现检测到某个程序,会由这个线程检测并杀死xxx.exe自己

阅读 2.3k
2 个回答

以linux为例,线程中调用pthread_exit()只会终止掉线程自己。但是调用exit()/_exit()就能终止掉整个进程。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

在C++中,可以使用std::terminate()函数来终止主程序。具体来说,当调用std::terminate()函数时,程序会立即终止,并调用所有已注册的终止处理程序。如果没有注册终止处理程序,则程序会调用默认的终止处理程序,该处理程序会调用std::abort()函数来终止程序。

以下是一个使用std::terminate()函数来终止主程序的示例:

#include <iostream>
#include <thread>

void thread_func()
{
    // do something
}

int main()
{
    std::thread t(thread_func);

    // do something

    std::terminate(); // 终止主程序

    return 0;
}

在上面的示例中,当调用std::terminate()函数时,程序会立即终止,并调用所有已注册的终止处理程序。由于没有注册终止处理程序,程序会调用默认的终止处理程序,该处理程序会调用std::abort()函数来终止程序。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题