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,包含以下属性:
| 属性 | 类型 | 说明 |
|---|---|---|
rss | Number | 常驻内存大小(字节) |
heapTotal | Number | V8 堆总大小(字节) |
heapUsed | Number | V8 已用堆大小(字节) |
external | Number | V8 外部内存(字节) |
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(标准输入)。
返回对象包含以下属性:
| 属性 | 类型 | 说明 |
|---|---|---|
stdout | String | 标准输出 |
stderr | String | 标准错误 |
code | Number | 退出码 |
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 为空串)。
返回对象包含以下属性:
| 属性 | 类型 | 说明 |
|---|---|---|
stdout | String | 标准输出 |
stderr | String | 标准错误 |
code | Number | 退出码 |
pid | Number | 子进程 PID |
signal | String? | 终止信号(若有) |
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 .. ' 字节'