You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Ruby获取非当前运行进程的相关信息?

获取非当前进程信息的Ruby实现方案

1. Ruby标准库的局限性

Ruby自带的Process模块主要聚焦于当前进程的操作(比如获取当前PID、当前用户ID),没有直接提供获取其他进程信息的API,所以需要借助第三方库或者平台特定的实现方式。

2. 跨平台第三方Gem:sys-proctable

这是最省心的方案,sys-proctable是跨平台的进程信息获取库,支持Linux、macOS、Windows等主流系统,API简洁易用。

使用步骤:

  1. 安装gem:
gem install sys-proctable
  1. 代码示例(贴近你想要的写法):
require 'sys/proctable'
include Sys

# 传入目标PID获取进程信息
proc_info = ProcTable.ps(1234)

if proc_info
  puts "PID: #{proc_info.pid}"
  # 通过用户ID获取用户名
  user_info = Sys::User.getpwuid(proc_info.euid)
  puts "所属用户: #{user_info.name}"
  # 进程启动时间(格式根据系统有所不同,部分系统返回Time对象)
  puts "运行时间: #{proc_info.starttime}"
  # 其他可用字段:cmdline(命令行)、cpu_usage(CPU使用率)等,不同平台字段略有差异
else
  puts "进程 #{1234} 不存在"
end

3. 无依赖的平台特定实现(不推荐,移植性差)

如果不能使用第三方gem,可以针对不同系统写原生代码,比如Linux下读取/proc文件系统,macOS下调用系统API,但这种方式需要处理不同平台的差异,维护成本高。

Linux下示例(读取/proc文件系统):

require 'etc'

def get_process_info(pid)
  proc_status_path = "/proc/#{pid}/status"
  return nil unless File.exist?(proc_status_path)

  status_data = {}
  File.read(proc_status_path).each_line do |line|
    key, val = line.split(':', 2)
    status_data[key.strip] = val.strip
  end

  # 提取启动时间需要额外处理/proc/[pid]/stat
  proc_stat_path = "/proc/#{pid}/stat"
  return nil unless File.exist?(proc_stat_path)
  stat_fields = File.read(proc_stat_path).split
  start_jiffies = stat_fields[21].to_i
  # 系统时钟节拍,可通过`getconf CLK_TCK`获取,大多Linux系统是100
  hertz = 100
  start_seconds_since_boot = start_jiffies.to_f / hertz
  uptime_seconds = File.read('/proc/uptime').split[0].to_f
  start_time = Time.now - uptime_seconds + start_seconds_since_boot

  {
    pid: pid,
    user: Etc.getpwuid(status_data['Uid'].split("\t")[0].to_i).name,
    start_time: start_time.strftime('%Y-%m-%d %H:%M:%S')
  }
end

# 使用示例
process = get_process_info(1234)
if process
  puts "PID: #{process[:pid]}"
  puts "所属用户: #{process[:user]}"
  puts "启动时间: #{process[:start_time]}"
else
  puts "进程不存在"
end

内容的提问来源于stack exchange,提问作者tscheingeld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:49:59