是否有红宝石方法来获取流程开始时间?像shell中的以下内容:
$ ps -p $$ -o lstart
STARTED
Thu Oct 18 11:49:22 2012
我希望避免解析ps输出。另外,我知道如何在linux上解析/ proc / self / status来获取信息,但我希望有一个更便携的解决方案。
更新 一种可移植的方式就是我想要的。我使用了sys / proctable并使用以下行来获得我想要的东西:
ProcTable.ps($$).starttime
谢谢,Koen。
更新 我正在玩这个,并发现它不像我想象的那么便携。在Darwin上,返回Time对象。在Linux上,返回一个整数,该整数对应于自引导以来的jiffies数。不幸的是,您需要使用sysconf系统调用来获取ms / jiffy的数量。这个系统调用不能直接在ruby上使用。我使用以下内容在Linux上获取proc开始时间:
module LinuxCLib
extend FFI::Library
ffi_lib 'c'
@@cg = FFI::ConstGenerator.new(nil, :required => true) do |gen|
gen.include('unistd.h')
gen.const(:_SC_CLK_TCK)
end
attach_function :sysconf, [:int], :long
def self.hz
self.sysconf(@@cg["_SC_CLK_TCK"].to_i)
end
end
def self.get_proc_starttime
proc_jiffies_since_boot_starttime = Sys::ProcTable.ps($$).starttime
stat_lines = File.open("/proc/stat").readlines
system_s_since_epoch_boottime = catch(:boottime) do
stat_lines.each do |line|
split_line = line.split
throw :boottime, split_line[1].to_i if split_line[0] == "btime"
end
nil
end
proc_s_since_epoch_starttime = (
proc_jiffies_since_boot_starttime/LinuxCLib::hz + system_s_since_epoch_boottime)
Time.at(proc_s_since_epoch_starttime)
end
答案 0 :(得分:1)
有一颗宝石可以做到:sys-proctable
它解析/proc
安装宝石
gem install sys-proctable
需要宝石
require 'sys/proctable'
include Sys
适用于所有流程
ProcTable.ps{ |p|
puts p.comm
puts p.starttime
}
仅针对单个流程(例如您的示例)
p = ProcTable.ps($$)
puts p.inspect
如果您不想使用gem,也许您可以从the source
中提取解析/proc
文件的部分内容。
修改强>
我误读了您做知道如何解析/proc
文件的部分。但也许宝石仍然可以用于你,使其便携等等。