system
system
介绍
system
模块提供了多种与系统交互的方法,包括获取系统信息、环境变量操作、执行系统命令等功能。
属性与方法
名称 | 类型 | 参数 | 返回值 | 说明 |
---|---|---|---|---|
arch | 方法 | string | 获取系统架构 | |
numCpu | 方法 | int | 获取CPU核心数量 | |
os | 方法 | string | 获取操作系统名称 | |
hostname | 方法 | string | 获取主机名 | |
setEnv | 方法 | key:string,value:string | boolean | 设置环境变量的值 |
getEnv | 方法 | key:string | string | 获取环境变量的值 |
unsetEnv | 方法 | key:string | boolean | 删除环境变量 |
cwd | 方法 | string | 获取当前工作目录 | |
chdir | 方法 | dir:string | boolean | 改变当前工作目录 |
exec | 方法 | name:string, ...args:string[] | Command | 执行系统命令 |
exit | 方法 | code:int | boolean | 退出程序 |
pid | 方法 | int | 获取当前进程ID | |
ppid | 方法 | int | 获取父进程ID | |
tempDir | 方法 | string | 获取当前操作系统的临时文件夹 | |
memoryUsage | 方法 | object | 获取当前程序的内存使用统计信息 | |
stdin | 属性 | Reader | 获取标准输入流 | |
stdout | 属性 | Writer | 获取标准输出流 | |
maxMemory | 属性 | int | 获取进程最大内存限制(单位:字节) | |
maxProcess | 属性 | int | 获取进程最大占用CPU核心数 |
arch
获取系统架构。
示例
import {system} from "core";
// 获取系统架构
let arch = system.arch();
console.log(arch); //打印系统架构
numCpu
获取CPU核心数量。
示例
import {system} from "core";
// 获取CPU核心数量
let numCpu = system.numCpu();
console.log(numCpu); // 输出CPU核心数量
os
获取操作系统名称。
示例
import {system} from "core";
// 获取操作系统名称
let os = system.os();
console.log(os); // 输出操作系统名称
hostname
获取主机名。
示例
import {system} from "core";
// 获取主机名
let hostname = system.hostname();
console.log(hostname); // 输出主机名
setEnv
设置环境变量的值。
语法
system.setEnv(key:string,value:string)
参数
- key: 环境变量名称
- value: 变量值
示例
import {system} from "core";
// 设置环境变量的值
system.setEnv("MY_ENV", "my_value");
console.log(system.getEnv("MY_ENV")); // 输出: "my_value"
getEnv
获取环境变量的值。
语法
system.getEnv(key:string)
参数
- key: 环境变量名称
示例
import {system} from "core";
// 获取环境变量的值
let value = system.getEnv("MY_ENV");
console.log(value); // 输出环境变量的值
unsetEnv
删除环境变量。
语法
system.unsetEnv(key:string)
参数
- key: 环境变量名称
示例
import {system} from "core";
// 删除环境变量
system.unsetEnv("MY_ENV");
console.log(system.getEnv("MY_ENV")); // 输出: ""
cwd
获取当前工作目录。
示例
import {system} from "core";
// 获取当前工作目录
let cwd = system.cwd();
console.log(cwd); // 输出当前工作目录
chdir
改变当前工作目录。
语法
system.chdir(dir:string)
参数
- dir: 新的工作目录
示例
import {system} from "core";
// 改变当前工作目录
let newDir = "/path/to/new/dir";
system.chdir(newDir);
console.log(system.getCwd()); // 输出新的工作目录
exec
执行系统命令。
语法
system.exec(name:string, ...args:string[])
参数
- name: 程序名称
- args: (可选) 多个参数
示例
import {system} from "core";
// 执行系统命令
let output = system.exec("ls", "-l");
console.log(output); // 输出命令执行结果
exit
退出程序。
语法
system.exit(code:int)
参数
- code: 程序的退出状态。
操作系统和父进程可以使用这个退出状态来判断程序是否成功执行或者遇到了什么类型的错误,0
表示程序成功执行并正常退出。非0
值表示程序因为某种原因异常退出。不同的值可以表示不同类型的错误。
示例
import {system} from "core";
// 退出程序
system.exit(0);
pid
获取当前进程ID。当你调用 pid
函数时,它会返回一个 int
类型的值,这个值就是当前vino
程序进程的ID。进程ID(PID)是操作系统分配给每个运行中的进程的唯一标识符,用于区分不同的进程.
示例
import {system} from "core";
// 获取当前进程ID
let pid = system.pid();
console.log(pid); // 输出当前进程ID
ppid
获取当前进程的父进程ID
示例
import {system} from "core";
// 获取父进程ID
let ppid = system.ppid();
console.log(ppid); // 输出父进程ID
tempDir
获取当前操作系统默认的临时目录路径。临时目录通常用于存储临时文件,这些文件在程序运行完成后可能不再需要,并且可能会被系统自动清理。
tempDir
方法会根据不同的操作系统返回不同的临时目录路径。例如,在Linux和macOS系统中,临时目录通常是/tmp
;在Windows系统中,临时目录由环境变量%TMP%
、%TEMP%
或%USERPROFILE%\AppData\Local\Temp
指定。
示例
import {system} from "core";
// 获取临时文件夹
let tempDir = system.tempDir();
console.log(tempDir);
memoryUsage
获取当前程序的内存使用统计信息
示例
import {system} from "core";
let memory = system.memoryUsage();
//当前程序已分配但尚未释放的堆内存总量。它可以用来衡量当前程序实际使用的内存量,是活跃的内存占用。
console.log(memory.alloc);//单位:字节(bytes)
//自程序启动以来累计分配的总内存量,包括已释放的内存。
//这个值通常用来衡量程序整体的内存使用情况,包括程序总共使用过的内存量
console.log(memory.totalAlloc);//单位:字节(bytes)
//运行时向操作系统申请的总内存量,包括用于堆、栈和其他内部数据结构的内存。
//这是一个比较综合的指标,可以反映出程序整体的内存使用情况,包括分配给程序的全部内存资源。
console.log(memory.sys);//单位:字节(bytes)
//自程序启动以来,运行时执行的垃圾回收的次数
console.log(memory.numGC);
//自程序启动以来,运行时执行的分配内存操作的次数
console.log(memory.mallocs)
stdin
获取标准输入流
示例
import {system} from "core"
let bufReader = new BufferReader(system.stdin);
console.log("请输入: ")
//读取一行
let s = bufReader.readString("\n")
console.log("你输入的内容是:", s)
stdout
获取标准输输出流
示例
import {system} from "core"
system.stdout.write("hello vino\n")
maxMemory
maxMemory
属性的作用是设置vino
运行时的内存分配上限(Memory Limit)。该限制定义了运行时为堆(heap)内存管理器分配内存的总量上限。超过该限制时,运行时会尝试释放内存或者减少内存使用。该属性默认值为0,表示不会强制应用任何特定的内存限制,将根据系统可用的内存动态管理内存分配
示例
import {system} from "core"
console.log(system.maxMemory); // 输出:0
system.maxMemory = 1024 * 1024 * 1024; // 设置最大内存为1GB
console.log(system.maxMemory); // 输出:1073741824
注意事项
- 不是硬性限制:
maxMemory
是一个提示或建议,vino
运行时会根据需要调整内存的使用,但它不是一个严格的硬性限制。 - 可能导致程序崩溃: 如果内存消耗超过设置的限制,
vino
运行时会尝试垃圾回收来释放内存,但在内存压力过大的情况下,可能导致程序崩溃(Out of Memory) - 适用于长时间运行的程序: 对于长时间运行的程序(如服务器应用),
maxMemory
可以帮助管理内存使用并避免因内存泄漏导致的性能问题。 - 如果在程序启动时,通过命令行设置了
--maxMemory
参数值,则这个参数的设置会覆盖掉程序中的设置。 - 如果设置的值为负数或为0,会使程序无限制地使用内存,类似于未设置时的默认行为。
maxProcess
maxProcess
用于获取或设置vino
程序可以使用的最大操作系统线程数,它控制运行时的调度器在并发执行虚拟线程时,能够使用的操作系统内核线程的数量。调整这个值可以帮助优化程序性能或限制资源使用。合理设置maxProcess
是高效利用多核系统的关键之一。默值为当前主机CPU物理核心数。
示例
import {system} from "core";
console.log(system.maxProcess); // 输出当前电脑物理核心数
system.maxProcess = 6; // 设置最大占用CPU物理核心数为6
console.log(system.maxProcess); // 输出:6
注意事项
- 如果在程序启动时,通过命令行指定了
--maxProcess
参数,则这个参数的设置会覆盖掉程序中的设置。 - 如果设置的值为负数或为0,会忽略设置,类似于未设置时的默认行为。
- 将 maxProcess 设置得过低(比如 1)会导致多个虚拟线程被强制串行执行,这可能会大大降低并发程序的性能。
- 将 maxProcess 设置为大于 CPU 核心数的值可能不会显著提高性能,反而会因为频繁的上下文切换而导致性能下降
- maxProcess 的设置也会影响垃圾回收(GC)的行为,较高的并发度可能会导致垃圾回收更加频繁。
Command
Command 对象代表一个外部命令,并提供了多种方法来控制和与命令交互。以下是 Command 对象的主要字段和方法:
名称 | 类型 | 参数 | 返回值 | 说明 |
---|---|---|---|---|
path | 属性 | string | 命令的路径。 | |
args | 属性 | string[] | 命令及其参数的列表。 | |
dir | 属性 | string | 命令的工作目录 | |
output | 方法 | string | 执行命令并返回其标准输出的内容 | |
combinedOutput | 方法 | string | 执行命令并返回其标准输出和标准错误的合并内容 |
path
命令的路径,可以是绝对路径或相对路径。如果路径为空,则使用命令名在系统的PATH环境变量中查找。
示例
import {system} from "core";
let cm = system.exec("ls", "-l")
//打印: /bin/ls
console.log(cm.path)
args
命令及其参数的列表。第一个元素是命令本身,后续元素是传递给命令的参数
示例
import {system} from "core";
let cm = system.exec("ls", "-l")
//打印: [ ls, -l ]
console.log(cm.args)
dir
命令的工作目录。如果dir
为空,则命令在调用进程的当前目录中执行
示例
import {system} from "core";
let cm = system.exec("ls", "-l")
//打印空字符串
console.log(cm.dir)
output
捕获标准输出(stdout
),如果命令在执行过程中有错误输出,这些错误不会被捕获到返回的输出中。
示例
import {system} from "core";
let cm = system.exec("ls", "-l")
let result = cm.output()
//打印输出
console.log(result)
combinedOutput
方法捕获标准输出和标准错误,并将它们合并在一起作为一个单一的输出返回。如果命令产生错误,这些错误输出也会包含在返回的输出中。
示例
import {system} from "core";
let cm = system.exec("ls", "-l")
let result = cm.combinedOutput()
//打印标准输出
console.log(result)