跳到主要内容

process 进程管理

process 是 Alia 的标准库进程管理模块,提供环境变量访问、命令执行等进程相关操作。

引入模块​

import 'process' as process ~ 导入为变量
import 'process' ~ 导入作用域

进程信息属性​

以下属性可直接读取,无需调用:

pid​

pid 为当前进程 PID,类型为 Number。

const pid = process.pid
print pid

ppid​

ppid 为父进程 PID,类型为 Number。

const ppid = process.ppid
print ppid

platform​

platform 为操作系统平台,类型为 String。可能值:'linux'、'darwin'、'win32'。

print process.platform

arch​

arch 为 CPU 架构,类型为 String。可能值:'x64'、'arm64'、'ia32'。

print process.arch

version​

version 为 Alia 运行时的版本号,类型为 String。

print process.version

title​

title 为进程标题,可读写。

print process.title
process.title = 'my-app'

工作目录​

cwd​

cwd 返回当前工作目录 String。

const dir = process.cwd
print dir

chdir​

chdir 切换当前工作目录。

process.chdir '/tmp'

进程运行信息​

uptime​

uptime 为进程已运行时间(秒),类型为 Number。

const up = process.uptime
print up

memory​

memory 返回进程内存使用情况 Object,包含以下属性:

属性类型说明
rssNumber常驻内存大小(字节)
heapTotalNumberV8 堆总大小(字节)
heapUsedNumberV8 已用堆大小(字节)
externalNumberV8 外部内存(字节)
const mem = process.memory
print mem.rss
print mem.heapUsed

环境变量​

envGet​

envGet 读取环境变量并返回 String;变量不存在时返回 Null。

const home = process.envGet 'HOME'
print home

if (Ok home) {
print 'Home: ' .. home
}

envSet​

envSet 设置环境变量。

process.envSet 'MY_VAR' to 'hello'

envHas​

envHas 判断环境变量是否存在并返回 Boolean。

if process.envHas 'PATH' {
print 'PATH exists'
}

envDelete​

envDelete 删除环境变量。

process.envDelete 'MY_VAR'

envAll​

envAll 返回所有环境变量 Object。

const allEnv = process.envAll
const keys = Object.keys allEnv
print keys.length

进程控制​

exit​

exit 终止当前进程,退出状态码为 code。

process.exit 0 ~ 正常退出
process.exit 1 ~ 异常退出

kill​

kill 向指定 PID 的进程发送信号,signal 默认为 'SIGTERM'。发送失败(目标进程不存在、无权限,或当前平台不支持信号)时抛出错误。

process.kill 12345 ~ 默认 SIGTERM
process.kill 12345 with 'SIGKILL'

命令执行​

exec​

exec 通过 shell 执行命令并返回 Object;命令失败时不抛出错误,而是将错误信息写入返回结果。

可选参数 options(Object)支持:cwd(工作目录)、env(环境变量对象)、timeout(超时毫秒数)、input(标准输入)。

返回对象包含以下属性:

属性类型说明
stdoutString标准输出
stderrString标准错误
codeNumber退出码
const result = process.exec 'echo Hello, Alia!'
print result.code ~ 0
print result.stdout ~ "Hello, Alia!\n"

~ 指定工作目录执行
const inTmp = process.exec 'pwd' with *[cwd: '/tmp']

~ 命令执行失败时不会抛出错误
const fail = process.exec 'exit 42'
print fail.code ~ 42

spawn​

spawn 不通过 shell 直接执行命令并返回 Object;其比 exec 更安全(无 shell 注入风险),且能获取子进程 PID。

可选参数 options(Object)支持:cwd(工作目录)、env(环境变量对象)、timeout(超时毫秒数)、input(标准输入)、stdio(标准流模式:'pipe' 捕获到返回对象,默认;'inherit' 直通当前终端;'ignore' 丢弃。指定 inherit/ignore 时返回对象的 stdout/stderr 为空串)。

返回对象包含以下属性:

属性类型说明
stdoutString标准输出
stderrString标准错误
codeNumber退出码
pidNumber子进程 PID
signalString?终止信号(若有)
const result = process.spawn 'ls' with ['-la', '/tmp']
print result.code
print result.pid
print result.stdout

~ 指定工作目录执行
const inTmp = process.spawn 'pwd' with [] with *[cwd: '/tmp']

~ 输出直通当前终端(编译、运行类长任务推荐)
process.spawn 'cargo' with ['build'] with *[cwd: '.', stdio: 'inherit']

示例代码​

import 'process' as process

~ 基本进程信息
print 'PID: ' .. process.pid
print '平台: ' .. process.platform
print '架构: ' .. process.arch

~ 工作目录
const dir = process.cwd
print '当前目录: ' .. dir

~ 环境变量
const shell = process.envGet 'SHELL'
if (Ok shell) {
print 'Shell: ' .. shell
}

if !(process.envHas 'ALIA_TEST_VAR') {
process.envSet 'ALIA_TEST_VAR' to 'hello'
}

const allEnv = process.envAll
print '环境变量总数: ' .. (Object.keys allEnv).length

process.envDelete 'ALIA_TEST_VAR'

~ 执行命令
const echo = process.exec 'echo Hello from Alia'
print echo.stdout

const list = process.spawn 'ls' with ['-la', '/tmp']
print 'ls 退出码: ' .. list.code
print '子进程 PID: ' .. list.pid

~ 进程运行时间
print '已运行: ' .. process.uptime .. ' 秒'

~ 内存使用
const mem = process.memory
print '堆内存: ' .. mem.heapUsed .. ' / ' .. mem.heapTotal .. ' 字节'

下一步​