system

system

介绍

system 模块提供了多种与系统交互的方法,包括获取系统信息、环境变量操作、执行系统命令等功能。

属性与方法

名称类型参数返回值说明
arch方法string获取系统架构
numCpu方法int获取CPU核心数量
os方法string获取操作系统名称
hostname方法string获取主机名
setEnv方法key:string,value:stringboolean设置环境变量的值
getEnv方法key:stringstring获取环境变量的值
unsetEnv方法key:stringboolean删除环境变量
cwd方法string获取当前工作目录
chdir方法dir:stringboolean改变当前工作目录
exec方法name:string, ...args:string[]Command执行系统命令
exit方法code:intboolean退出程序
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)
更新时间 9/19/2024, 12:09:33 PM