C++ 使用进程ID终止进程
我试图显示所有正在运行的进程及其内存使用情况,并提供一个kill选项,我使用OpenProcess方法获取当前进程使用的内存。如何使用processID终止进程 代码如下:C++ 使用进程ID终止进程,c++,windows,winapi,process,C++,Windows,Winapi,Process,我试图显示所有正在运行的进程及其内存使用情况,并提供一个kill选项,我使用OpenProcess方法获取当前进程使用的内存。如何使用processID终止进程 代码如下: BOOL GetProcessList( ) { HANDLE hProcessSnap; HANDLE hProcess; HANDLE hToken; PROCESSENTRY32 pe32; DWORD dwPriorityClass; PROCESS_MEMORY_COUNTERS pmc;
BOOL GetProcessList( )
{
HANDLE hProcessSnap;
HANDLE hProcess;
HANDLE hToken;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
PROCESS_MEMORY_COUNTERS pmc;
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( hProcessSnap == INVALID_HANDLE_VALUE )
{
printError( TEXT("CreateToolhelp32Snapshot (of processes)") );
return( FALSE );
}
pe32.dwSize = sizeof( PROCESSENTRY32 );
if( !Process32First( hProcessSnap, &pe32 ) )
{
printError( TEXT("Process32First") ); // show cause of failure
CloseHandle( hProcessSnap ); // clean the snapshot object
return( FALSE );
}
if(!OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, FALSE, &hToken))
{
if (GetLastError() == ERROR_NO_TOKEN)
{
if (!ImpersonateSelf(SecurityImpersonation))
return FALSE;
if(!OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, FALSE, &hToken)){
printError( TEXT("OpenThreadToken") );
return FALSE;
}
}
else
return FALSE;
}
SetPrivilege(hToken, SE_DEBUG_NAME, FALSE);
do
{
printf( TEXT("\nPROCESS NAME: %s"), pe32.szExeFile );
dwPriorityClass = 0;
SIZE_T dwMin, dwMax;
hProcess = OpenProcess( PROCESS_QUERY_LIMITED_INFORMATION , FALSE, pe32.th32ProcessID );
if(GetProcessMemoryInfo( hProcess, (PROCESS_MEMORY_COUNTERS *)&pmc, sizeof(pmc)))
{
printf( "\nPagefileUsage: %d KB", pmc.PagefileUsage/1024);
} else{
printError( TEXT("GetProcessMemoryInfo") );
}
CloseHandle(hProcess);
}while( Process32Next( hProcessSnap, &pe32 ) );
CloseHandle( hProcessSnap );
return( TRUE );
}
由于您手头有一个
hProcess
,您可以使用它:
BOOL ok = TerminateProcess (hProcess, exit_code);
其中exit\u code
可以是您喜欢的任何内容(尽量使其有意义,以防流程中有任何内容正在等待,并且希望知道其退出的原因)
如果您不想这样做,可以使用:
您需要检查OpenProcess()
是否成功,因为(除其他外)您可能没有足够的访问权限,并且您需要在完成hProcess
后关闭它,即使您已经终止了进程本身
TerminateProcess()
的文档
HANDLE hProcess = OpenProcess (PROCESS_TERMINATE, FALSE, process_id);
if (hProcess)
{
BOOL ok = TerminateProcess (hProcess, exit_code);
CloseHandle (hProcess);
}
else
{
DWORD err = GetLastError ();
...
}