设计一个程序,每秒统计一次当前系统的进程状况,并按照内存使用自多到少排序打印输出相关信息。

设计一个程序,每秒统计一次当前系统的进程状况,并按照内存使用自多到少排序打印输出相关信息。对已经结束的进程,另外给出一个列表,并显示该进程的结束时间和持续时间。

题目要求

  1. 该题目要求使用两个链式线性表。一个链表存储当前活动进程,要求使用双向链表,排序要求是按照内存使用自多到少排序。另外一个链表存储已结束进程,要求使用单向链表,按照结束时间离当前时间的关系排序,最近的最前,最远的最后;
  2. 每秒在窗口内更新一次当前系统进程情况,输出內容包括:进程名,持续时间,内存使用情况;
  3. 每秒在窗口内更新一次已结束进程情况,输出内容包括:进程名,持续时间,结束时间;
  4. 注意进程在这两个链表中的切换,一个进程既可被结束,也可以过段时间后再被运行。

编码思路

一直在学习JavaScript,所以一开始想用JavaScript实现,但是想了想好像没那么简单去实现,因为JavaScript代码大多运行在浏览器的环境中,要想直接获取操作系统进程状况,肯定是不行的。于是google了一番,发现相关的资料很少,并且看到StackOverflow有一个帖子的回答是这样的:

我想知道是否可以在web浏览器(很可能是ie)中使用javascript来检索当前正在运行的进程列表?
我不想启动任何进程或关闭它们之类的。只是一个列表,我可以检查,然后说,例如,做其他事情,如果某个进程正在运行。

最佳答案:
不,您无法从以正常权限运行的基于浏览器的javascript获取有关操作系统进程的任何信息。
出于隐私和安全原因,浏览器javascript环境受到了非常仔细的保护,并与系统隔离。如果一个人能按你的要求做,那么互联网上的任何网页都能准确地看到你运行的程序,并能将这些信息发送回他们自己的服务器。
如果你愿意放松你的安全设置,一些版本的ie包含一些访问操作系统信息的能力(例如,请参见here),但是你应该意识到,如果你确实放松了你的安全设置,那么未知的网页可能能够访问此信息或在你的操作系统中也采取行动。其他浏览器甚至不包含常规网页的这种功能。由于只有一个浏览器支持此功能,并且只有在安全限制放松时,这在任何方面都不是通用浏览器功能。

于是就此作罢,重拾大一大二学的C++,为什么不用Java呢?因为网上有很多相关的教程,有很多同学用Java写,并且老师说不允许调用系统库函数,于是选择用C++完成这个课程设计。因为linux系统下的ps命令无法获取系统进程名,而题目要求进程名,于是选择在windows系统下完成课设,虽然windows下的wmic命令没有linux的ps命令那么直接显示持续时间,但是自己写一下时间转换函数,转换之后计算一下也不会特别麻烦。

具体编码细节思路见流程图:
统计系统进程信息

完整代码

CurrentProcess.h

#pragma once
#include <iostream>
using namespace std;

struct CurrentProcess {
     //当前进程节点
	string name;  //进程名
	string duration;  //持续时间
	long memory;  //使用内存
	CurrentProcess* pre = nullptr;
	CurrentProcess* next = nullptr;

	CurrentProcess(string name, string duration, long memory) {
   
		this->name = name;
		this->duration = duration;
		this->memory = memory;
	}
};

class TwoLinkList {
     //双向链表类
public:
	CurrentProcess* head;  //头指针
	CurrentProcess* tail;  //尾指针
	int length;  //链表长度

	TwoLinkList();  //构造函数
	~TwoLinkList();  //析构函数
	void clone(const TwoLinkList& l);  //拷贝函数
	void downSort();  //降序排列
	void addNode(string name, string duration, long memory);  //向尾部添加节点
	bool findNode(string name);  //查找结点
	void deleteNode();  //删除节点
	void showNode();  //输出节点
};

CurrentProcess.cpp

#include<iomanip>
#include "CurrentProcess.h"

TwoLinkList::TwoLinkList() {
   
	head = nullptr;
	tail = nullptr;
	length = 0;
}

TwoLinkList::~TwoLinkList() {
   
	CurrentProcess* temp = head;
	while (head != nullptr) {
   
		head = head->next;
		delete temp;  //释放内存
		temp = head;
	}
	length = 0;
	head = tail = nullptr;
}

void TwoLinkList::clone(const TwoLinkList& backup) {
   
	head = tail = nullptr;
	length = 0;
	if (backup.head != nullptr) {
   
		CurrentProcess* p = backup.head;
		head = new CurrentProcess(p->name, p->duration, p->memory);
		length++;
		p = p->next;
		CurrentProcess* q = head;
		while (p != nullptr)
		{
   
			q->next = new CurrentProcess(p->name, p->duration, p->memory);
			q = q->next;
			length++;
			tail = p;
			p = p->next;
		}
		
		int abc = 0;
	}
}

void TwoLinkList::downSort() {
   
	CurrentProcess* p, * q;
	CurrentProcess temp(""
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值