C语言 Linux 获取给定 PID 的进程启动时间



我需要在用户空间中使用C代码获取进程的开始时间。
该过程将以 root 身份运行,所以我可以打开/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. 阅读
  3. 字符,确保我仅在点击关闭"("时才完成阅读。- 第二个参数是 tcomm(可执行文件的文件名(
  4. 读取字符 - 第三个参数进程状态。

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

最新更新