Как получить время начала текущего процесса в мкс в C?

Мне нужно получить момент времени (или отличие от эпохи и эпохи), в котором начался текущий процесс. Он должен быть в высоком разрешении - по крайней мере, в микросекундах (10 ^ -6 секунд). Меня в основном интересует среда Linux, хотя, я полагаю, общий ответ был бы полезен для других людей.

Я знаю, что другие языки программирования (например, C#, Python) имеют для этого определенные возможности; листая информацию о стандартных библиотеках на C, похоже, что их нет.

Я также знаю, что у /proc/self/stat есть цифра времени безотказной работы, но это в один миг, а в один миг — это очень много времени. Кроме того, мне бы не хотелось начинать синхронизацию времени различных вызовов системы/библиотеки (один для времени безотказной работы, другой для текущего времени).

Примечание. Связанный с этим вопрос, время запуска процесса в Linux, касается времени запуска в секунд, а мне нужно что-то с гораздо более высоким разрешением.


person einpoklum    schedule 11.04.2015    source источник
comment
Что такое «время начала процесса»? Это когда пользователь щелкает какой-либо значок или нажимает «Ввод» в какой-то командной строке? Это когда загрузчик ОС вызывает «открыть» исполняемый файл, чтобы прочитать заголовок? Это когда первый рабочий набор загружается в виртуальную память? Это когда загрузчик начал или закончил создание потока для запуска кода? Это когда этот поток прыгает/вызывает начальный адрес из заголовка? Это когда crt вызывает main()? Все они будут иметь разное время с высокой точностью.   -  person Martin James    schedule 11.04.2015


Ответы (1)


Я подозреваю, что вы найдете в /proc/self/stat лучшее, что вы можете получить, это, вероятно, все, что сама ОС знает о времени запуска постфактум. Возможно, то, что у вас есть в C# и Python, просто преобразует это в микросекунды для вашего удобства.

person Bjorn Munch    schedule 11.04.2015
comment
Но если вы можете получить текущее время в usec (или лучше), почему бы ОС не сохранить что-то подобное в качестве времени запуска процесса? - person einpoklum; 11.04.2015
comment
Возможно, потому что процессы на самом деле не могут запускаться с интервалами меньше секунды, поэтому нет смысла хранить более высокое разрешение. Вы всегда можете преобразовать в микросекунды. - person Bjorn Munch; 11.04.2015
comment
Хм... интересно. Интересно, сработает ли это (мне это нужно для преобразования результатов профилировщика, значения времени которых относятся к времени запуска процесса). Но ты сказал, что я подозреваю... ты уверен? - person einpoklum; 11.04.2015
comment
Нет, я не уверен, но я думаю, что запись в /proc/self/stat — это лучшее, что вы можете получить, см. также другой комментарий выше. Запуск процесса не происходит мгновенно, поэтому микросекундная точность не имеет большого значения. И если вы имеете в виду первый экземпляр, когда ЦП выполняет код в контексте этого PID, это также не происходит в произвольное время, только когда ОС переключает контекст. Если вам нужно что-то более точное, вам, возможно, придется зарегистрировать точное время самостоятельно, в первую очередь в main(). - person Bjorn Munch; 11.04.2015