Как Linux измеряет прошедшее время определенного процесса?

#linux #process #elapsedtime

Вопрос:

Когда я смотрю на руководство по командам ps, оно предлагает измерение прошедшего времени для каждого процесса, независимо от того, жив ли этот процесс. Однако, когда я проверяю /proc//stat, он записывает только время запуска, время процессора и время пользователя. Я попытался добавить время процессора и время пользователя, но результат не совпадает с тем, что показывает прошедшее время. Поэтому я хотел бы поискать предложения о направлении измерения прошедшего времени.

Ответ №1:

Прошедшее время, отображаемое ps, является просто текущим временем — временем начала. Так что буквально только время, прошедшее по настенным часам с момента начала процесса.

Utime и stime в /proc/stat являются показателем общего времени, в течение которого процесс фактически выполнялся в системе (время пользователя и системное время), не считая времени, затраченного на ожидание чего-либо.

Комментарии:

1. Спасибо, что направили меня. У меня есть еще один последующий вопрос, основанный на вашем ответе: Как я получаю конечное время процесса от другого процесса, так как я не всегда могу использовать механизм мониторинга, такой как waitpid/poll/epoll, когда этот процесс все еще выполняется. Если я хочу получить жизненный цикл этого процесса после его смерти. Какую информацию я могу получить от ядра Linux или мне нужно сделать снимок метки времени для этого процесса до его завершения?

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