(1)一种方法是在安装好的虚拟机中获取进程信息;
(2)但是这个题目的含义是,在windows中,通过获取与ubuntu相关的进程,解决问题。
先来看一下简单的做法吧:
1.下载并安装VirtualBox软件:从VirtualBox官方网站(https://www.virtualbox.org/)下载适用于Windows系统的安装程序,并按照提示进行安装。
2.下载Linux系统镜像:从Linux官方网站(如Ubuntu官网:https://ubuntu.com/)下载适用于VirtualBox的Linux系统镜像文件(通常是ISO文件)。
3.创建虚拟机:打开VirtualBox软件,点击"新建"按钮创建一个新的虚拟机。在创建过程中,选择Linux作为操作系统类型,并根据下载的Linux系统镜像文件进行设置。
4.安装Linux系统:选择新创建的虚拟机,点击"启动"按钮启动虚拟机。在虚拟机中,选择安装Linux系统选项,并按照安装向导的提示进行操作。
5.安装Python:在安装完Linux系统后,打开终端(Terminal)并输入以下命令安装Python:
sudo apt update
sudo apt install python3
6.获取进程数据和资源信息:在Linux系统中,可以使用一些命令来获取进程数据和资源信息。例如,
使用top命令可以查看系统的进程和资源使用情况,
使用cat /proc/meminfo命令可以查看内存信息。(在终端中应该就可以使用这些命令)
7.编写Python脚本:在Linux系统中,创建一个Python脚本,使用subprocess模块来执行命令并获取输出结果。(这里的脚本是在虚拟机中编写的,但是我需要在windows中编写)
import subprocess
import time
# 获取进程数据和资源信息的命令
command_cpu = "top -b -n 1"
command_mem = "cat /proc/meminfo"
# 获取20条数据
num_records = 20
# 定时10秒获取数据
interval = 10
# 存储结果的文件
result_file = "result.txt"
# 循环获取数据
for i in range(num_records):
# 执行命令并获取输出结果
cpu_output = subprocess.check_output(command_cpu, shell=True).decode("utf-8")
mem_output = subprocess.check_output(command_mem, shell=True).decode("utf-8")
# 将结果写入文件
with open(result_file, "a") as f:
f.write(f"Record {i+1}:\n")
f.write("CPU:\n")
f.write(cpu_output)
f.write("\n")
f.write("Memory:\n")
f.write(mem_output)
f.write("\n")
# 等待一段时间
time.sleep(interval)
- 运行该脚本就可以。
================
windows系统需要与ubuntu建立ssl通信。 具体步骤为:
(1)在windows系统上安装SSH客户端,比如使用PuTTY或者其他SSH客户端软件连接到远程的Linux服务器
(2)在linux远程服务器上安装和配置SSH服务,确保LINUX系统已经安装和配置了SSH服务,安装的具体方法可以参考Linux发行版的文档或者教程
(3)在windows系统上安装python和相关依赖,一般需要安装对应的库执行SSH连接以及命令的执行。如:
pip install paramiko
(4)在windows系统上编写脚本,调用库连接到远程服务器之后,执行命令并获取所需的信息:
import paramiko
import time
# 远程Linux服务器的IP地址、用户名和密码
host = "远程服务器IP地址"
username = "用户名"
password = "密码"
# 获取进程数据和资源信息的命令
command_cpu = "top -b -n 1"
command_mem = "cat /proc/meminfo"
# 获取20条数据
num_records = 20
# 定时10秒获取数据
interval = 10
# 存储结果的文件
result_file = "result.txt"
# 创建SSH客户端
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程Linux服务器
client.connect(host, username=username, password=password)
# 循环获取数据
for i in range(num_records):
# 执行命令并获取输出结果
stdin, stdout, stderr = client.exec_command(command_cpu)
cpu_output = stdout.read().decode("utf-8")
stdin, stdout, stderr = client.exec_command(command_mem)
mem_output = stdout.read().decode("utf-8")
# 将结果写入文件
with open(result_file, "a") as f:
f.write(f"Record {i+1}:\n")
f.write("CPU:\n")
f.write(cpu_output)
f.write("\n")
f.write("Memory:\n")
f.write(mem_output)
f.write("\n")
# 等待一段时间
time.sleep(interval)
# 关闭SSH连接
client.close()
(5)运行这个脚本,就可以获取所需要的信息了。
还有其他方法,如使用python脚本获取虚拟机virtual Box的命令。
import subprocess
import time
# 获取虚拟机信息的命令
command = "VBoxManage list vms"
# 获取20条数据
num_records = 20
# 定时10秒获取数据
interval = 10
# 存储结果的文件
result_file = "result.txt"
# 循环获取数据
for i in range(num_records):
# 执行命令并获取输出结果
output = subprocess.check_output(command, shell=True).decode("utf-8")
# 将结果写入文件
with open(result_file, "a") as f:
f.write(f"Record {i+1}:\n")
f.write(output)
f.write("\n")
# 等待一段时间
time.sleep(interval)
围绕着这个题目,一直有个问题没有解决。就是windows系统与虚拟机的关系到底是什么样的。为什么在windows系统中,无法获取到ubuntu系统的运行状态,而只能够间接获取,这可能与操作系统有关,也可能与虚拟机的设置原理有关。我觉得了解这一点,才是这个问题的核心。