windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。
(2)语言级—以普通程序员身份认识高级语言VC++/Java/VB的进程创建与撤销工具。
(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。 三、实验步骤
1、windows的进程管理 当前状态
图2-1 windows任务管理器
切换前
第 5 页 共 25 页
图2-2 windows任务管理器
切换后
图2-3 windows任务管理器
撤销
第 6 页 共 25 页
图2-4 windows任务管理器
2、VC++进程创建与撤销工具
Windows所创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用ExitProcess() 或TerminateProcess() API函数终止。通常应用程序的框架负责调用 ExitProcess() 函数。对于C++ 运行库来说,这一调用发生在应用程序的main() 函数返回之后。
本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。
步骤1:登录进入Windows。
步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。
第 7 页 共 25 页
步骤3:“文件”->“新建”->“C++ Source File”,建立源程序2-1.cpp。
清单2-1 创建子进程
#include
int main(int argc, CHAR* argv[]) { STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
std::string strCmdLine = \ // Start the child process.
if( !CreateProcess( NULL, // No module name (use command line) (LPSTR)strCmdLine.c_str(), // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags
NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure ) {
printf( \ return 1; }
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); getchar(); return 0; }
步骤4:单击“Build”菜单中的“Compile 2-1.cpp”命令,系统显示:
This build command requires an active project workspace. Would
you like to create a default project workspace ?
第 8 页 共 25 页