操作系统课程设计报告-获取所有正在运行的进程信息.doc_第1页
操作系统课程设计报告-获取所有正在运行的进程信息.doc_第2页
操作系统课程设计报告-获取所有正在运行的进程信息.doc_第3页
操作系统课程设计报告-获取所有正在运行的进程信息.doc_第4页
操作系统课程设计报告-获取所有正在运行的进程信息.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东北大学秦皇岛分校计算机与通信工程学院操作系统课程设计设计题目 获取所有正在运行的进程信息 专业名称班级学号学生姓名指导教师设计时间课程设计任务书专业: 学号: 学生姓名: 设计题目:获取所有正在运行的进程信息一、设计实验条件实验楼808Dev C+Visual Studio 2015二、设计任务及要求1. 获取所有正在运行的进程信息;2. 进程管理器。三、设计报告的内容1. 设计题目与设计任务1.必做题目:获取所有正在运行的进程信息 设计任务:在Windows操作系统环境下用C+、Java或C语言编程,通过调用GreatToolhelp32Snapshot,Process32First,Process32Next等先关API函数来实现显示正在运行的进程信息。进程信息显示应包括:进程文件名,进程ID,父进程ID。2.选做题目:进程管理器 设计任务:在Linux或Windows系统环境下,实现一个系统进程管理器,能够显示当前系统的活动进程信息(进程名、用户、优先级、内存使用等),并能结束或创建特定进程。可参考Windows下“任务管理器”功能。2. 前言本次操作系统课程设计的目的在于将课本上的知识自己动手实践一遍,一方面提高对课本知识的理解,深入了解计算机操作系统内部的运行原理,另一方面也提高自己探究问题,查阅资料解决问题以及与他人合作的能力,是一次对综合能力的训练。3. 设计主体(各部分设计内容、分析、结论等)1.必做部分:获取所有正在运行的进程信息 该任务主要借助于调用GreatToolhelp32Snapshot,Process32First,Process32Next等API函数来对当前进程建立快照。GreatToolhelp32Snapshot可以通过获取进程信息为指定的进程、进程使用的堆HEAP、模块MODULE、线程建立一个快照。Process32First是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用Process32First函数来获得第一个进程的句柄。Process32Next是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用Process32Next函数来获得下一个进程的句柄。PROCESSENTRY32是用来存放快照进程信息的一个结构体。其结构体信息如下:typedef struct tagPROCESSENTRY32 DWORD dwSize; /结构体大小 DWORD cntUsage; /0 DWORD th32ProcessID; /进程ID:PID ULONG_PTR th32DefaultHeapID; /0 DWORD th32ModuleID; /0 DWORD cntThreads; /进程计数 DWORD th32ParentProcessID; /父进程ID LONG pcPriClassBase; /线程优先权 DWORD dwFlags; /0 TCHAR szExeFileMAX_PATH; /进程的可执行文件名称 PROCESSENTRY32, *PPROCESSENTRY32;程序代码如下: #include #include #include DWORD GetLastErrorBox(HWND hWnd, LPSTR lpTitle); int main() /定义进程信息结构 PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); HANDLE hProcessShot; hProcessShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); /获取进程列表,最后一个参数是0 if (hProcessShot = INVALID_HANDLE_VALUE) GetLastErrorBox(NULL,获取进程列表失败); return 0; / 创建系统当前进程快照 if (Process32First(hProcessShot,&pe32)/获取下一个进程快照 for (int i = 0;Process32Next(hProcessShot, &pe32);i+) printf(%d : %-20s ,i, pe32.szExeFile); TCHAR szStrTemp50; wsprintf(szStrTemp,PID : %d, pe32.th32ProcessID); printf(%-20s , szStrTemp); wsprintf(szStrTemp,ParentID : %d, pe32.th32ParentProcessID); printf(%-20s n,szStrTemp); /遍历进程快照 CloseHandle(hProcessShot); return 0; / 显示错误信息 DWORD GetLastErrorBox(HWND hWnd, LPSTR lpTitle) LPVOID lpv; DWORD dwRv; if (GetLastError() = 0) return 0; dwRv = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), (LPSTR)&lpv, 0, NULL); MessageBox(hWnd, (LPCSTR)lpv, lpTitle, MB_OK); if(dwRv) LocalFree(lpv); SetLastError(0); return dwRv; 2.选做部分:进程管理器图2.1 进程管理器主界面图2.2 使用进程管理器打开计算器程序代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Diagnostics;namespace 操作系统课程设计 public partial class Form1 : Form public Form1() InitializeComponent(); private void getProcessInfo() try listView1.Items.Clear(); Process MyProcesses = Process.GetProcesses(); tsslInfo.Text = 进程总数: + MyProcesses.Length.ToString(); int ProceseeNum = 0; /记录进程数量 listView1.Items.Clear(); Process AllProcesses = Process.GetProcesses(); foreach (Process MyProcess in AllProcesses) ListViewItem item1 = new ListViewItem(MyProcess.ProcessName + .exe, 0); /映像名称 /item1.Checked = true; item1.SubItems.Add(MyProcess.Id.ToString(); /进程PID item1.SubItems.Add(MyProcess.BasePriority.ToString(); item1.SubItems.Add(MyProcess.WorkingSet64 / 1024).ToString() + K); listView1.Items.AddRange(new ListViewItem item1 ); ProceseeNum += 1; catch private void Form1_Load(object sender, EventArgs e) getProcessInfo(); private void 结束进程ToolStripMenuItem_Click(object sender, EventArgs e) if (listView1.SelectedItems.Count = 0) return; ListViewItem items = listView1.SelectedItems0; string StrPro = items.Text; /获取选中的进程名 int pid = int.Parse(items.SubItems1.Text); /获取选中的进程的PID Process SelPro = new Process(); int flag = 0; /异常标志。如果 Process.GetProcessById(pid)出现异常,不执行结束. try SelPro = Process.GetProcessById(pid); catch (ArgumentException ae) flag+; MessageBox.Show(ae.Message); if (0 = flag) if (DialogResult.OK = MessageBox.Show(string.Format(确定要结束进程 0 吗?, StrPro), 提示, MessageBoxButtons.OKCancel, MessageBoxIcon.Information) try SelPro.Kill(); /结束进程 getProcessInfo(); /结束进程后刷新listview catch (Win32Exception ioe) /获取异常信息 MessageBox.Show(ioe.Message); catch (InvalidOperationException ioe) MessageBox.Show(ioe.Message); private void label1_Click(object sender, EventArgs e) private void listView1_SelectedIndexChanged(object sender, EventArgs e) private void 刷新ToolStripMenuItem_Click(object sender, EventArgs e) listView1.Refresh(); private void textBox1_TextChanged(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e) if (textBox1.Text != string.Empty) Process.Start(textBox1.Text); /启动一个进程 else MessageBox.Show(请输入启动项); textBox1.Focus(); 4. 结束语为期两周的课程设计结束了,在此期间我在同学和老师的帮助下圆满完成了本次课程设计。课程设计作为综合性的学习实践任务,它不同于以往的课堂学习任务、课程实验任务。以前的学习任务主要是根据课本内容及老师所给资料去完成的,有一定的参照性,所以相对而言比较简单,然而并不能很好地达到锻炼自己动手能力的目的。此次课程设计是对我们这一学期对计算机操作系统所学知识的一个综合的训练及考核,是对所学知识的应用能力和理论知识对实践技能相结合的全面的检验。并对我们如何根据要做的课题对现有的资料进行理解和运用的能力的考核。真正做到了理论联系实际,把以前所学的知识综合贯通进行实践,并在实践中不断学习和自我完善。通过本次课程设计,我学到了不少的知识。不仅纠正了之前课程学习过程中出现的一些错误,还在实践中验证了自己的一些猜想。在课程设计的过程中有困惑,也有喜悦。当自己认真去对待课程设计时,能学到知识是值得骄傲的,能意识到自己的不足是值得庆幸的。做学问也是做人,在作学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论