如何解析 ps 命令的开始时间输出?如果是 06:38PM
这样的形式,它可以解析,但当它看起来像 Tue01PM
时,它就不能解析。我还尝试添加文化信息,例如 Convert.ToDateTime(result[8], CultureInfo.GetCultureInfo("en-US"))
,并使用 ParseExact
如 DateTime.ParseExact(result[8], "dddhhhh", CultureInfo.GetCultureInfo("en-US"))
.
最佳答案
ps
可以要求命令提供特定的数据,并且在某些情况下以特定的格式,这可以使解析结果变得更容易。您可以使用 -o
请求特定数据。命令行选项,其参数是以逗号分隔的项目列表,格式为:item=HEADER
。 HEADER
是要使用的列标题;省略它意味着不会打印该列的标题(但如果您也省略 =
,您将获得默认标题)。
开始时间至少有两个常用项:start
和lstart
。这些分别为您提供时间的标准版本和长版本:
$ ps -ostart= 2875
11:28:13
$ ps -olstart= 2875
Wed Mar 18 11:28:13 2015
在 Linux 上,ps
从"file" /proc/<i>pid</i>/stat
获取其信息,这是包含空格分隔字段的单行(请参阅 man 5 proc
)。开始时间是列表中的第22项;它是一个整数,表示自系统启动以来的时钟周期数。在 bash 中,您可以通过一些工作将其转换为更有用的东西:
start_time() {
local now running ticks uptime
now=$(date +%s) # time in seconds since epoch
running=$(cut -d' ' -f22 /proc/$1/stat)
# start time of process in ticks since boot
ticks=$(getconf CLK_TCK) # ticks per second (usually 100)
uptime=($(</proc/uptime)) # seconds since boot and idle time
bc <<<"$now-${uptime[0]}+$running/$ticks"
}
$ date +"%Y-%m-%d %H:%M:%S" -d@$(start_time 2875)
2015-03-18 11:28:12
关于c# - 从c#中的linux "ps"命令输出解析进程启动时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29126698/