2020-10-27 实验三 操作系统进程管理

实验三 操作系统进程管理

一、实验目的:

  1. 掌握系统进程的概念,加深对Linux
    / UNIX进程管理的理解。

  2. 学会使用ps命令和选项。

  3. 列出当前shell中的进程。

  4. 列出运行在系统中的所有进程。

  5. 根据命令名搜索特定的进程。

  6. 使用kill命令终止进程。

  7. 根据用户名查找和终止进程。

二、实验环境:

VC6.0

三、实验内容:

(写出主要的内容)

PART 2 Windows中创建进程程序演示

一.创建进程程序

源代码:



TCHAR sCommandLine[100];

       BOOL ret;

       DWORD dwExitCode;

       PROCESS_INFORMATION pi;

       STARTUPINFO si={sizeof(si)};

       GetWindowsDirectory(sCommandLine,MAX_PATH);

       strcat(sCommandLine,"\\system32\\calc.exe");

   
ret=CreateProcess(NULL,sCommandLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);

       if (ret)

       {

              CloseHandle(pi.hThread);

              WaitForSingleObject(pi.hProcess,INFINITE);

              GetExitCodeProcess(pi.hProcess,&dwExitCode);

              CloseHandle(pi.hProcess);

       }

运行截图:

1

答:
WaitForSingleObject函数的作用是:用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。

二.浏览进程信息程序。
源代码:



#include <stdio.h>

#include <windows.h>

#include <TlHelp32.h>

int main()

{

       char
jsq[10]="calc.exe"; int a=0;

// 为进程的所有线程拍个快照

HANDLE hSnapshort =
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if( hSnapshort==INVALID_HANDLE_VALUE )

{

printf("CreateToolhelp32Snapshot调用失败!\n");

return -1;

}

 

// 获得进程列表,里面记录了进程的详细信息,再使用Process32First和Process32Next遍历快照中记录的每个进程信息

PROCESSENTRY32 stcProcessInfo;

stcProcessInfo.dwSize =
sizeof(stcProcessInfo);

BOOL bRet = Process32First(hSnapshort,
&stcProcessInfo);

printf("进程名\t\t\t 进程ID\t 线程数\t 父进程ID\t 结构大小\t 此进程的引用计数\n");

while (bRet)

{

printf("%s\t\t %d\t %d\t %d\t %d\t
%d\n", stcProcessInfo.szExeFile, stcProcessInfo.th32ProcessID,
stcProcessInfo.cntThreads, stcProcessInfo.th32ParentProcessID,
stcProcessInfo.dwSize, stcProcessInfo.cntUsage);

bRet = Process32Next(hSnapshort,
&stcProcessInfo);

if(stcProcessInfo.szExeFile==jsq)

       a=1;

}

CloseHandle(hSnapshort);

if(a==0)

{

TCHAR sCommandLine[100];

BOOL ret;

DWORD dwExitCode;

PROCESS_INFORMATION pi;

STARTUPINFO si={sizeof(si)};

GetWindowsDirectory(sCommandLine,MAX_PATH);

strcat(sCommandLine,"\\system32\\calc.exe");

ret=CreateProcess(NULL,sCommandLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);

if (ret)

{

CloseHandle(pi.hThread);

WaitForSingleObject(pi.hProcess,INFINITE);

GetExitCodeProcess(pi.hProcess,&dwExitCode);

CloseHandle(pi.hProcess);

}

}

system("pause");

return 0;

}

运行截图:

2

四、心得体会:

学习了进程的管理,了解到创建进程程序和浏览进程信息程序的相关代码并能学以致用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值