操作系统原理实验报告——进程控制与描述

一、实验目的

利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。

二、实验内容
1、进程的创建和终止。编写一段程序,可以创建一个进程,并终止当前创建的进程。试观察记录程序执行的结果,并分析原因。
2、利用VC++6.0实现上述程序设计和调试操作,对于进程创建的成功与否、终止进程操作的成功与否提供一定的提示框。
3、通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。

三、实验步骤和思路
1、创建进程
使用Windows提供的 CreateProcess() API函数来创建一个新的进程和它的主线程,通过这个新进程运行指定的可执行文件。
CreateProcess()函数原型:
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);

在创建进程之前,需要对各参数赋值并初始化,其中最核心的参数如下:
1、可执行文件运行时的文件名及其命令行
在本实验中,我为lpCommandLine赋的值是steam.exe,目的是打开steam。
2、用于指定新进程的主窗口特性的STARTUPINFO
定义一个STARTUPINFO结构的si,并通过.cb对si进行初始化赋值。
3、用于返回有关新进程及其主线程的信息的结构PROCESS_INFORMATION
定义一个PROCESS_INFORMATION结构的pi。
操作系统原理实验报告——进程控制与描述_第1张图片

2、终止进程
终止进程主要有以下两个步骤
1、获取已创建进程的进程句柄hProcess。
2、用TerminateProcess来终止指定进程及其所有的线程,其函数原型如下
BOOL TerminateProcess(
HANDLE hProcess,//进程句柄
UINT uExitCode //进程终止码
);
操作系统原理实验报告——进程控制与描述_第2张图片

四、实验截图

1、创建一个进程
操作系统原理实验报告——进程控制与描述_第3张图片

2、终止一个进程
操作系统原理实验报告——进程控制与描述_第4张图片

五、实验中的问题
1、实验中最大的问题是对于语言的不熟悉,比如Createprocess 函数和 TerminateProcess 函数中的参数,很多参数依旧不知道作用,最终在CSDN的帮助下勉勉强强完成了该试验。
六、实验代码

#include 
#include 
#include 
using namespace std; 

BOOL KillProcess(HANDLE hProcess);

int main()
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    /* allocate memory */
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    /* create child process */
    
    if (!CreateProcess(TEXT("C:\\Program Files (x86)\\Steam\\Steam.exe"), /* use command line */
        NULL, /* command */ 
		NULL, /* don£¬t inherit process handle */
        NULL, /* don^ inherit thread handle */
        FALSE, /* disable handle inheritance */
        0, /* no creation flags */
        NULL, /* use parentJs environment block */
        NULL, /* use parent1s existing directory */
        &si,
        &pi))
    {
    	cout<<"½ø³Ì´´½¨Ê§°Ü :("<<endl<<endl;
        return -1;
    }
    cout<<"½ø³Ì´´½¨³É¹¦ :)"<<endl<<endl;
    cout<<"ÇëÊäÈëÊý×ÖÑ¡ÔñÑ¡Ï"<<endl<<"1.3Ãëºó¹Ø±Õ½ø³Ì"<<endl<<"2.È¡Ïû"<<endl;
    int n;
    cin>>n;
    if(n == 1){
    	cout<<"½ø³Ì½«ÔÚ3ÃëºóÖÕÖ¹.. :)"<<endl<<endl;
    	Sleep(3000);
    	KillProcess(pi.hProcess);
    	/* parent will wait for the child to complete */
	    WaitForSingleObject(pi.hProcess, INFINITE);
	    printf("½ø³ÌÒÑ˳ÀûÖÕÖ¹ :)");
	    /* close handles */
	    CloseHandle(pi.hProcess);
	    CloseHandle(pi.hThread);
	}
}


BOOL KillProcess(HANDLE hProcess)
{
    if(hProcess==NULL)
        return FALSE;
    if(!TerminateProcess(hProcess,0))
        return FALSE;
    return TRUE;
}

你可能感兴趣的:(大三上,操作系统)