TerminateProcess 杀进程

今天又掉坑里了。用“TerminateProcess”杀某个控制台进程,结果进程杀死了,应用程序还停留在状态栏,任务管理器中的“进程”已找不到被杀死的进程,“应用程序”里还能看到。最后发现是“system("pause");”惹的祸,这个玩意起了一个系统进程。以后慎用。

 

bool KillProgress(const DWORD& _dwId)
	{
		HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, _dwId);//通过这个函数判断进程是否活着,不准确
		if (nullptr == hProcess)
		{
			std::cout << "进程的句柄为空!ID = " << _dwId << std::endl;
			return false;
		}
		else
		{
			DWORD dwExitCode = _dwId;
			::GetExitCodeProcess(hProcess, &dwExitCode);
			BOOL bres = ::TerminateProcess(hProcess, dwExitCode);
			if (bres == 0)
			{
				std::cout << "杀死进程出异常:ID = " << _dwId << " 错误码:" << GetLastError() << std::endl;
				return false;
			}
			::CloseHandle(hProcess);
		}
		return true;
	}
bool IsExistProgress(const DWORD& _dwId)
	{
		PROCESSENTRY32 pe;
		HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获取系统进程快照句柄
		pe.dwSize = sizeof(PROCESSENTRY32);
		if (!::Process32First(hSnapshot, &pe))
		{
			std::cout << "获取第一个进程句柄失败!" << std::endl;
			return false;
		}
		bool bret = false;
		while (true)
		{
			pe.dwSize = sizeof(PROCESSENTRY32);
			if (::Process32Next(hSnapshot, &pe) == FALSE)
				break;
			if (_dwId == pe.th32ProcessID)
			{
				bret = true;
				break;
			}
		}
		::CloseHandle(hSnapshot);
		return bret;
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值