跳到主要内容

进程

进程模块提供了一套全面的 API 用于进程管理和监控。通过 Process 类进行访问。

概述

进程模块提供统一接口用于:

  • 进程创建和执行
  • 进程状态监控
  • 进程终止
  • 进程日志流式处理

特性

  • 使用命令和参数创建和执行进程
  • 实时进程状态监控
  • 进程终止和清理
  • 基于事件的进程日志流式处理
  • 内存使用量跟踪
  • 跨平台进程管理
  • 事件驱动的进程状态变化
  • 一次性事件监听器

示例

创建和执行进程

// 执行命令
const process = await Process.exec('command', ['arg1', 'arg2']);

// 获取进程 ID
const processId = process.id;

进程信息

// 获取特定进程的信息
const info = await Process.info('process-id');

// 获取当前进程的信息
const currentInfo = await process.info();

// 列出所有运行中的进程
const processes = await Process.list();

进程控制

// 终止特定进程
await Process.kill('process-id');

// 终止当前进程
await process.kill();

进程事件

进程模块通过 ProcessEvent 枚举支持事件驱动的进程监控:

enum ProcessEvent {
Running = "processRunning",
Killed = "processKilled",
Exited = "processExited"
}

事件处理

// 绑定进程事件
process.bind(ProcessEvent.Running, () => {
console.log('Process is running');
});

process.bind(ProcessEvent.Killed, () => {
console.log('Process was killed');
});

process.bind(ProcessEvent.Exited, () => {
console.log('Process has exited');
});

// 一次性事件监听器
process.once(ProcessEvent.Exited, () => {
console.log('Process exited (one-time event)');
});

// 解绑事件
process.unbind(ProcessEvent.Running);

进程日志

LogEventWatcher 类提供对进程日志的实时访问:

// 获取日志事件监视器
const logWatcher = process.logEvents();

// 监听日志事件
logWatcher.bind(LogEvent.Data, (data) => {
console.log('Log data:', data);
});

logWatcher.bind(LogEvent.Error, (error) => {
console.error('Log error:', error);
});

logWatcher.bind(LogEvent.Out, (data) => {
console.log('Standard output:', data);
});

logWatcher.bind(LogEvent.End, () => {
console.log('Log stream ended');
});

// 完成后关闭日志监视器
logWatcher.close();
备注

每次获取进程日志时,您都将收到最新的日志。系统不会存储历史日志。如果您需要捕获所有日志,应该从进程启动时就开始监听 data 事件。

最佳实践

  1. 进程管理

    • 当进程不再需要时及时清理
    • 监控进程资源以防止内存泄漏
    • 为进程操作实现适当的错误处理
  2. 事件处理

    • 使用 unbind 在事件监听器不再需要时移除它们
    • 对于只应触发一次的事件使用一次性事件监听器
    • 处理所有可能的进程状态
  3. 日志管理

    • 当日志监视器不再需要时关闭它们
    • 尽早开始监听日志以捕获所有输出
  4. 安全性

    • 验证和清理命令参数