古詩詞大全網 - 成語查詢 - 為什麽TerminateProcess不能結束進程解決思路

為什麽TerminateProcess不能結束進程解決思路

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 執行 下面的命令, 絕大部分進程都能結束,方便實用。