为什么TerminateProcess不能结束进程解决思路

 我来答
像素BXWDVCS
2013-10-10 · TA获得超过191个赞
知道答主
回答量:142
采纳率:66%
帮助的人:71.2万
展开全部
STARTUPINFO StartupInfo;//定义STARTUPINFO结构指针 memset(&StartupInfo,0,sizeof(STARTUPINFO)); StartupInfo.cb = sizeof(STARTUPINFO); StartupInfo.dwFlags=STARTF_USESHOWWINDOW; StartupInfo.wShowWindow=SW_SHOW; PROCESS_INFORMATION ProcessInfo; if (!CreateProcess("D:\\Program Files\\Fluent.Inc\\ntbin\\ntx86\\gambit.exe" , cmdline.GetBuffer(cmdline.GetLength()),NULL,NULL,FALSE,0,NULL,"E:\\zuoye\\gambit1",&StartupInfo,&ProcessInfo)){cout<<"Create Fail!"<<endl;exit(1);}else{cout<<"Success!"<<endl;} WaitForSingleObject(ProcessInfo.hProcess,INFINITE);}void main(){gambit();HANDLE han=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取进程快照 PROCESSENTRY32 lpp; lpp.dwSize=sizeof(PROCESSENTRY32);BOOL bo;bo=Process32First(han,&lpp); //从快照里取第一个进程信息 TCHAR *str1;while(bo){str1=lpp.szExeFile ; if(!strcmp(str1,"exceed.exe") || !strcmp(str1,"gambit.exe")){HANDLE han2=OpenProcess(1,TRUE,lpp.th32ProcessID); //取进程实例 PROCESS_TERMINATE //cout<<str; TerminateProcess(han2,0); //关闭}bo=Process32Next(han,&lpp); //取下一个进程信息}CloseHandle(han); ------解决方案--------------------------------------------------------TerminateProcess结束进程是不安全的。这个进程最好没有带锁的资源。而你的这个里面好像用到了cout,虽然我不知道这个到底是否有没有锁,但是这个cout肯定是互斥的。这样就有可能导致了结束进程失败 ------解决方案--------------------------------------------------------先确定有没有执行到TerminateProcess ------解决方案--------------------------------------------------------既然是windows 平台, 那就用system 调用相关的 命令吧, system 执行 下面的命令, 绝大部分进程都能结束,方便实用。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式