从linux" ps"解析进程开始时间c#中的命令输出

时间:2015-03-18 15:54:51

标签: c# linux parsing date datetime

如何解析ps命令的开始时间输出?它可以在表单中进行解析,例如06:38PM,但是当它看起来像Tue01PM时,它会以某种方式解析。我还尝试添加cultureinfo,如Convert.ToDateTime(result[8], CultureInfo.GetCultureInfo("en-US"))ParseExact,如DateTime.ParseExact(result[8], "dddhhhh", CultureInfo.GetCultureInfo("en-US"))

3 个答案:

答案 0 :(得分:3)

可以要求ps命令显示特定数据,在某些情况下可以使用特定格式,这样可以更容易地解析结果。您使用-o命令行选项请求特定数据,该参数的参数是以逗号分隔的表单列表:item=HEADERHEADER是要使用的列标题;将其删除意味着不会为该列打印标题(但如果您还省略了=,则会获得默认标题。)

开始时间至少有两个常用项:startlstart。这些分别为您提供标准版本和长版本的时间:

$ ps -ostart= 2875
11:28:13
$ ps -olstart= 2875
Wed Mar 18 11:28:13 2015

在Linux上,ps从"文件"中获取信息。 /proc/pid/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

答案 1 :(得分:0)

在linux中,您可以override the system date format并随意提供。然后你可以确定输出。这就是我要做的。

答案 2 :(得分:0)

在pid / process $ MYPID

的epoc中给出开始时间
MYPID=$PPID
STARTING_EPOC_OF_MYPID=$(date +%s -d "$(ps -olstart= ${MYPID})")
echo $STARTING_EPOC_OF_MYPID

如果与上述不同,我不太确定。