繁体   English   中英

Linux获取给定PID的进程开始时间

[英]Linux get process start time of given PID

我需要在用户空间中使用C代码获取进程的开始时间。
该进程将以root身份运行,因此我可以fopen / proc / PID / stat。
我看到了实施,例如:

在linux上启动进程的时间
要么
http://brokestream.com/procstat.c

但它们无效,为什么它们无效? 如果进程第二个参数包含空格,例如:

[ilan@CentOS7286-64 tester]$ cat /proc/1077/stat
1077 (rs:main Q:Reg) S 1 1054 1054 0 -1 1077944384 21791 0 10 0 528 464 0 0 20 0 3 0 1056 321650688 1481 18446744073709551615 1 1 0 0 0 0 2146172671 16781830 1133601 18446744073709551615 0 0 -1 1 0 0 1 0 0 0 0 0 0 0 0 0 0

这些解决方案不起作用。

除了解析/ proc / PID / stat结果之外,还有更好的方法来检索进程启动时间吗? 我可以做以下逻辑:

  1. 读长,第一个参数是pid
  2. 读取字符,确保只有在按下')'才能完成阅读。 - 第二个参数是tcomm(可执行文件的文件名)
  3. read char - 第三个参数进程状态。

solaris中 ,您只需将结果读取到psinfo_t结构。

您只需使用stat(2)内核调用即可。

proc文件系统不设置创建时间。 但是您可以使用修改时间,因为只有在目录中添加或删除文件时,目录的修改时间才会更改。 并且因为proc文件系统中目录的内容只是更改,如果替换正在运行的内核的内核模块,您可以非常肯定,修改时间也是创建时间。

例:

$ stat -c %y /proc/1
2018-06-01 11:46:57.512000000 +0200
$ uptime -s
2018-06-01 11:46:57

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM