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

start time of a process on linux
要么
http://brokestream.com/procstat.c

但是它们无效,为什么它们无效?如果process 2nd参数包含空格,例如:

[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结果之外,还有其他更好的方法来检索进程开始时间吗?我可以执行以下逻辑:
  • 长读,第一个参数是pid
  • 读取char,确保仅在单击close')'时才完成读取。 -第二个参数是tcomm(可执行文件名)
  • 读取字符-第三参数过程状态。

  • 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
    

    07-24 09:51
    查看更多