使用ExitProcess ()终止进程

进程只提供地址空间和内核对象,在运行时由该地址空间中的主线程表示。 当返回主线程的入口点函数时,该进程也将终止。 此进程的终止方式是进程的成功终止,该进程中的所有线程资源都将正确清除。 除了这种进程的正常终止方法外,还可能需要在程序中使用代码强制终止本进程和其他进程的执行。 ExitProcess ()函数的原型如下:

语音退出处理(uintuexitcode;

那个参数uExitCode在流程中设定了结束代码。 此函数具有强制性,运行完成后流程将终止,以后的代码将无法运行。 ExitProcess ) )函数在退出流程时可以通知相关动态链接库,但由于强制执行这些函数,ExitProcess ) )函数的使用存在安全问题。 例如,如果程序在调用ExitProcess ()函数之前在new操作符中请求空间,则由于ExitProcess () )函数的强制性,delete操作符无法释放,从而导致内存泄漏。 由于ExitProcess () )函数具有强制性和不稳定性,使用时请小心。

使用TerminateProcess ()终止进程

ExitProcess ()只强制终止本进程,而要在一个进程中强制终止另一个进程(TerminateProcess ) )实现。 与ExitProcess ()不同,TerminateProcess () )函数运行后,已终止的进程不会收到程序终止的通知。 也就是说,被结束的进程不能在结束前进行结束前的结束工作。 因此,通常只有在无法以其他方式强制终止进程时,才考虑使用“终止活动进程”)来强制终止进程。 以下是TerminateProcess ()的函数原型:

oolterminateprocess (handle hprocess,UINT uExitCode );

参数hProcess和uExitCode分别是流程句柄和退出代码。 如果结束的是该进程,则可以通过GetCurrentProcess ()获取句柄。 TerminateProcess ()异步运行,并且在调用返回后,无法确定终止的进程是否真的终止。 TerminateProcess ) )调用的进程如果对该详细信息感兴趣,则可以在WaitForSingleObject ) )中等待进程的真正结束。

如何终止系统在VC程序中运行的其他进程(此进程需要窗口界面)可以通过以下步骤轻松完成:

1 .获取进程句柄(通过窗口函数获取);

2 .获取进程ID号(通过GetWindowThreadProcessId函数获取);

3 .通过打开进程并将OpenProcess函数的第一个参数设置为PROCESS_TERMINATE,可以获取处理该进程的句柄。

使用TerminateProcess函数终止该过程,并将函数的第二个参数设置为4。

代码如下。

//结束进程

intcstaticfunc :3360 kill process (lpcstrpszclassname,lpcstr

pszWindowTitle )

{

手持程序手持程序;

ULONG nProcessID;

HWND TheWindow;

the window=:3360 findwindow (null,pszWindowTitle ); getwindowthreadprocessid (the window,nProcessID );

hprocess handle=:3360 open process (process _ termin ate,FALSE,

n处理程序id;

返回:3360终端ate process (hprocess handle,4 );

}

启动过程只需使用CreateProcess函数即可完成。 请注意此函数的一些输入参数。 第一个参数是

//开始新进程

intcstaticfunc :3360创建新流程(lpcstrpszexename ) )。

{

process _ informationpiprocinfogps;

STARTUPINFO siStartupInfo;

SECURITY_ATTRIBUTES saProcess,saThread;

zeromemory(sistartupinfo,sizeof ) sistartupinfo );

si startup info.CB=sizeof (si startup info );

sa process.nlength=sizeof (sa process );

sa process.lpsecuritydescriptor=null;

saProcess.bInheritHandle=true;

sa thread.nlength=sizeof (sa thread );

sa thread.lpsecuritydescriptor=null;

saThread.bInheritHandle=true;

返回:3360创建进程(空,) LPTSTR ) pszExeName,sa进程,

saThread,false,

CREATE_DEFAULT_ERROR_MODE、NULL、NULL,

siStartupInfo,piProcInfoGPS;