c# - 从c#中的linux "ps"命令输出解析进程启动时间

标签 c# linux parsing date datetime

如何解析 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=HEADERHEADER是要使用的列标题;省略它意味着不会打印该列的标题(但如果您也省略 = ,您将获得默认标题)。

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

$ 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/

相关文章:

c# - 调用 Task.WaitAll() 时如何设置任务的用户身份?

c++ - 是否有任何 API 或方法可以防止对动态分配的内存进行读访问(和写)?

mysql - 使用linux shell脚本将转储数据插入Mysql

html - 使用 Qt 读取和解析带有 QWebKit 的 html 文件?

objective-c - 在XML文档中使用“小于”字符(<)并进行解析

c# - 使用C#正则表达式替换XML元素内容

c# - 创建具有依赖项的应用程序快捷方式

c# - 从 GetHostEvidence() 获取空值

c# - 使用 Swagger 在 ASP.NET Core 中实现 OAuth

c++ - 为什么在线程中使用 system() 时,多线程 C 程序会在 Mac OS X 上强制使用单个 CPU?