Ответы на старые темы для новых заинтересованных участников.
Мы собираемся создать облегченную программу на языке C под названием getProcStartTime
, для которой у вас будет множество других применений.Он говорит вам, когда процесс был запущен, учитывая PID.Я верю, что вы все равно получите отметку времени до секунды, даже если процесс был начат несколько месяцев или лет назад.Сохраните этот исходный код в виде файла с именем getProcStartTime.c :
#include <time.h>
#include <procinfo.h>
main(argc, argv)
char *argv[];
{
struct procentry64 psinfo;
pid_t pid;
if (argc > 1) {
pid = atoi(argv[1]);
}
else {
printf("Usage : getProcStartTime pid\n");
return 1;
}
if (getprocs64(&psinfo, sizeof(struct procentry64), NULL, sizeof(struct fdsinfo64) , &pid, 1) > 0) {
time_t result;
result = psinfo.pi_start;
struct tm* brokentime = localtime(&result);
printf("%s", asctime(brokentime));
return 0;
} else {
perror("getproc64");
return 1;
}
}
Затем скомпилируйте его:
gcc getProcStartTime.c -o getProcStartTime
Вот волшебная логика: AIX так же, как в Linuxпроцесс под названием init
с PID 1. Его нельзя убить или перезапустить.Таким образом, время начала PID 1 - это время загрузки вашего сервера.
./getProcStartTime 1
На моем сервере возвращает Ср. 23 апреля 10:33:30 2014 ;у вас все будет по-другому.
Обратите внимание, я изначально сделал getProcStartTime
специально для этой цели, но теперь я использую его во всех видах других скриптов.Хотите знать, как долго работает база данных Oracle?Найдите PID Oracle PMON и передайте этот PID в качестве аргумента после getProcStartTime
.
Если вы действительно хотите, чтобы вывод представлял собой целое число секунд, было бы легко программировать упражнение для изменения кода выше.Имя getProcUptime
это просто предложение.Тогда вы можете просто позвонить:
./getProcUptime 1
ОБНОВЛЕНИЕ: Исходный код и предварительно скомпилированный бинарный файл для AIX 6.1 / 7.1 были помещены в мое репозиторий Github здесь: https://github.com/Josholith/getProcStartTime