实验三 操作系统进程管理
一、实验目的:
-
掌握系统进程的概念,加深对Linux
/ UNIX进程管理的理解。 -
学会使用ps命令和选项。
-
列出当前shell中的进程。
-
列出运行在系统中的所有进程。
-
根据命令名搜索特定的进程。
-
使用kill命令终止进程。
-
根据用户名查找和终止进程。
二、实验环境:
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);
}
运行截图:
答:
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;
}
运行截图:
四、心得体会:
学习了进程的管理,了解到创建进程程序和浏览进程信息程序的相关代码并能学以致用。