进程 processes

这个技能用于后台作业、长时间运行进程和计划任务的管理,包括作业的启动、监控、日志查看、停止和重启等操作。关键词包括:进程管理、后台作业、任务调度、资源限制、日志监控。

DevOps 0 次安装 0 次浏览 更新于 3/5/2026

name: 进程 description: “后台作业、长时间运行进程和任务管理” emoji: “⚙️”

进程 - 完整的API参考

生成和管理后台进程、长时间运行作业和计划任务。


聊天命令

启动作业

/job spawn "npm run backtest"               启动后台作业
/job spawn "python train.py" --name ml      命名作业
/job spawn "node bot.js" --restart          退出后自动重启

管理作业

/jobs                                       列出所有作业
/job status <id>                            检查作业状态
/job output <id>                            查看作业输出
/job output <id> --follow                    流式输出
/job stop <id>                              停止作业
/job restart <id>                           重启作业

日志

/job logs <id>                              查看日志
/job logs <id> --tail 100                    最后100行
/job logs <id> --since 1h                    最后一小时

TypeScript API参考

创建进程管理器

import { createProcessManager } from 'clodds/processes';

const processes = createProcessManager({
  // 工作目录
  cwd: process.cwd(),

  // 环境
  env: process.env,

  // 限制
  maxProcesses: 10,
  maxMemoryMB: 1024,

  // 日志
  logDir: './logs/jobs',
  maxLogSizeMB: 100,

  // 存储
  storage: 'sqlite',
  dbPath: './jobs.db',
});

启动进程

// 简单启动
const job = await processes.spawn({
  command: 'npm',
  args: ['run', 'backtest'],
  name: 'backtest-btc',
});

console.log(`作业ID: ${job.id}`);
console.log(`PID: ${job.pid}`);

// 带选项启动
const job = await processes.spawn({
  command: 'python',
  args: ['train.py', '--epochs', '100'],
  name: 'ml-training',

  // 环境
  env: {
    ...process.env,
    CUDA_VISIBLE_DEVICES: '0',
  },

  // 工作目录
  cwd: '/path/to/ml-project',

  // 自动重启
  restart: true,
  maxRestarts: 3,
  restartDelayMs: 5000,

  // 资源限制
  maxMemoryMB: 4096,
  timeoutMs: 3600000,  // 1小时
});

列出作业

const jobs = await processes.list();

for (const job of jobs) {
  console.log(`${job.id}: ${job.name}`);
  console.log(`  状态: ${job.status}`);  // 'running' | 'stopped' | 'failed' | 'completed'
  console.log(`  PID: ${job.pid}`);
  console.log(`  开始时间: ${job.startedAt}`);
  console.log(`  内存: ${job.memoryMB}MB`);
  console.log(`  CPU: ${job.cpuPercent}%`);
}

获取状态

const status = await processes.getStatus(jobId);

console.log(`状态: ${status.status}`);
console.log(`退出代码: ${status.exitCode}`);
console.log(`运行时间: ${status.runtimeMs}ms`);
console.log(`重启次数: ${status.restarts}`);
console.log(`内存: ${status.memoryMB}MB`);
console.log(`CPU: ${status.cpuPercent}%`);

获取输出

// 获取所有输出
const output = await processes.getOutput(jobId);
console.log(output.stdout);
console.log(output.stderr);

// 获取最后N行
const output = await processes.getOutput(jobId, { tail: 100 });

// 流式输出
const stream = processes.streamOutput(jobId);
stream.on('stdout', (data) => console.log(data));
stream.on('stderr', (data) => console.error(data));
stream.on('exit', (code) => console.log(`退出: ${code}`));

停止作业

// 优雅停止(SIGTERM)
await processes.stop(jobId);

// 强制杀死(SIGKILL)
await processes.stop(jobId, { force: true });

// 停止全部
await processes.stopAll();

重启作业

await processes.restart(jobId);

事件处理器

processes.on('started', (job) => {
  console.log(`作业开始: ${job.name}`);
});

processes.on('stopped', (job) => {
  console.log(`作业停止: ${job.name} (代码: ${job.exitCode})`);
});

processes.on('failed', (job, error), => {
  console.error(`作业失败: ${job.name}`, error);
});

processes.on('output', (job, type, data) => {
  console.log(`[${job.name}] ${type}: ${data}`);
});

作业状态

状态 描述
running 正在执行
stopped 用户停止
completed 成功完成
failed 错误退出
restarting 自动重启中

用例

运行回测

const job = await processes.spawn({
  command: 'npm',
  args: ['run', 'backtest', '--', '--strategy', 'momentum'],
  name: 'backtest-momentum',
});

// 等待完成
const result = await processes.wait(job.id);
console.log(`回测完成: ${result.exitCode === 0 ? '成功' : '失败'}`);

训练机器学习模型

const job = await processes.spawn({
  command: 'python',
  args: ['train.py'],
  name: 'ml-training',
  cwd: './ml',
  maxMemoryMB: 8192,
  timeoutMs: 86400000,  // 24小时
});

// 监控进度
processes.streamOutput(job.id).on('stdout', (line) => {
  if (line.includes('Epoch')) {
    console.log(line);
  }
});

最佳实践

  1. 给作业命名 —— 更容易识别
  2. 设置超时 —— 防止失控进程
  3. 监控内存 —— 防止OOM杀死
  4. 谨慎使用重启 —— 先调试失败
  5. 检查日志 —— 总是检查输出