Linux получает время начала процесса данного PID - PullRequest
0 голосов
/ 11 июня 2018

Мне нужно получить время начала процесса с использованием кода C в пользовательском пространстве.
Процесс будет выполняться от имени пользователя root, поэтому я могу открыть /proc/PID/stat.
. Я видел реализацию, например:

время запуска процесса в Linux
или
http://brokestream.com/procstat.c

Но они недействительны, Почему они недействительны?если параметр процесса 2 содержит пробел, например:

[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. read long, первый параметр pid
  2. read char, убедитесь, что я заканчиваю чтение только при нажатии close ')'.- 2-й параметр - tcomm (имя исполняемого файла)
  3. read char - состояние процесса 3-го параметра.

В solaris , вы просто читаете результат в psinfo_tструктура.

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете просто использовать вызов ядра 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...