Windows编程-怎样安全结束一个进程?结束一个进程要做哪些工作?

#include <iostream>
#include <windows.h>
#include <tchar.h>
using namespace std;
DWORD WINAPI ThreadProc(LPVOID);
int main()
{
    //结束一个进程-进程结束的方式:
    /*
     * 1.进程的主线程返回(最好的方式)
     * 主线程就是Main,WinMain代表的线程,也是进程中的第一个线程
     * 主线程返回,进程结束,其他线程自然被系统终止
     *
     * 2.进程中的一个线程调用ExitProcess函数(不推荐)
     * 这个函数只能结束本进程,其他进程无法终止
     * 这是一个同步函数,或者是阻塞函数,
     *
     * 3.结束其他进程中的某个线程调用TerminateProcess函数(不推荐)
     * 只要你有足够的权限,你就可以用这个函数结束系统中的任意进程,但这个函数是一个异步函数
     * 什么是异步函数?非阻塞函数。
     *
     * 4.进程中的所有线程执行完毕(这个很少出现)
    */

    //结束一个进程都做哪些工作?
    /*
     * 1.所有线程结束
     *
     * 2.所有用户GDI对象被释放,所有内核对象被关闭,例如画笔,背景刷,句柄,设备句柄,内存等。
     *
     * 3.退出码被设置
     * BOOL GetExitCodeProcess(HANDLE hProcess,PDWORD* pdwExitCode);
     * 如果这个进程依然在运行,那么这个函数返回STILL_ACTIVE
     *
     * 4.进程内核对象的状态变为有信号状态
     * WaitForSingleObject(HANDLE, DWORD)
     *
     * 5.进程内核对象的计数减一
     *
     * 6.如果在进程中,直接调用ExitProcess或者TerminateProcess函数,那么c++类的销毁函数可能不会被调用,
     * 可能会发生进程的内存泄漏
    */

    //父进程与子进程的关系
    /*
     * 父进程创建完子进程之后,立即关闭子进程的进程句柄
     * CloseHandle(ChildProcess_Handle);
     * CloseHandle(ChildThread_Handle);
     * 就可以断绝父子关系
*/

    //创建一个线程,需要使用线程函数
    DWORD dwThreadID = 0;
    HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadID);
    _tprintf(L"the sleeping Thread is %d\n",dwThreadID);
    WaitForSingleObject(hThread, INFINITE);


    //结束其他进程
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 5604);//结束进程PID为 11440 的进程
    TerminateProcess(hProcess, 333);//333是退出值,注意这个函数是一个异步函数,可能得到不这个值,要做好同步
    //做好同步的手段就是等待这个函数先做完,再继续
    WaitForSingleObject(hProcess, INFINITE);//无限等待,直到进程结束
    DWORD dwExitCode;
    GetExitCodeProcess(hProcess,&dwExitCode);//dwExitCode = 333
    cout << "dwExitCode:" << dwExitCode << endl;



    return 0;
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
    cout << "Thread start" << endl;
    Sleep(2000);//INFINITE无限
    cout << "Sleep over" << endl;
    //ExitProcess(0);//结束当前进程
    //cout << "ExitProcess" << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子砰砰枪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值