Intereting Posts
C для замены шаблона «найти» с «заменой» в текстовом файле, так как входной и выходной файлы должны иметь замененный шаблон Можно ли использовать блок кода в качестве аргумента для макроса C? Почему изменение строкового литерала вызывает ошибку сегментации? Обнаружение дублирующего элемента в массиве C – Чтение напрямую из буфера клавиатуры Изображения TIFF: как пиксели изображения 16 бит-RGBA чередуются? Векторизация модульной арифметики Как объявить и инициализировать в 4-мерном массиве в C SQLite в C. sqlite3_exec: параметр, установленный в функции обратного вызова, печатает неполные данные при вызове в main () Оптимизация кода C (AVR) Несколько вопросов о юридических аргументах printf («% s», …) Многопоточный отладочный учебник для GDB и C Получить информацию об оборудовании из существующих файлов в Linux с помощью C ошибка компиляции C2099: инициализатор не является константой C. Ошибка сегментации, когда функция изменяет динамически распределенный массив 2d

время начала процесса на linux

Как найти время начала процесса на машине Linux ubuntu с использованием языка c. В linux есть файл / proc / [pid] / stat, который дает информацию

starttime %lu /*The time in jiffies the process started after system boot*/
и файл / proc / stat, который дает

 btime %lu /*measurement of system boot time since Epoch in seconds*/ 

Для добавления обоих этих значений, как можно преобразовать прежнее значение в секунды, потому что оно находится в единицах jiffies.

Jiffies в секунду настраивается при компиляции ядра Linux.

Следующая программа использует количество jiffies в секунду для ядра, в котором вы работаете. Он принимает необязательный параметр командной строки, который является номером процесса. По умолчанию используется номер процесса самой запущенной программы. Каждую секунду он выдает время начала указанного процесса, как по местному времени, так и по UTC. Единственная причина цикла повторения – показать, что значение не изменяется.

 #include  #include  #include  #include  #include  #include  #include  #include  int find_nth_space(char *search_buffer, int space_ordinality ) { int jndex; int space_count; space_count=0; for(jndex=0; search_buffer[jndex]; jndex++ ) { if(search_buffer[jndex]==' ') { space_count++; if(space_count>=space_ordinality) { return jndex; } } } fprintf(stderr,"looking for too many spaces\n"); exit(1); } /* find_nth_space() */ int main(int argc, char **argv ) { int field_begin; int stat_fd; char proc_buf[80]; char stat_buf[2048]; long jiffies_per_second; long long boot_time_since_epoch; long long process_start_time_since_boot; time_t process_start_time_since_epoch; ssize_t read_result; struct tm gm_buf; struct tm local_buf; jiffies_per_second=sysconf(_SC_CLK_TCK); if(argc<2) { strcpy(proc_buf,"/proc/self/stat"); } else { sprintf(proc_buf,"/proc/%ld/stat",strtol(argv[1],NULL,0)); } for(;;) { stat_fd=open(proc_buf,O_RDONLY); if(stat_fd<0) { fprintf(stderr,"open() fail\n"); exit(1); } read_result=read(stat_fd,stat_buf,sizeof(stat_buf)); if(read_result<0) { fprintf(stderr,"read() fail\n"); exit(1); } if(read_result>=sizeof(stat_buf)) { fprintf(stderr,"stat_buf is too small\n"); exit(1); } field_begin=find_nth_space(stat_buf,21)+1; stat_buf[find_nth_space(stat_buf,22)]=0; sscanf(stat_buf+field_begin,"%llu",&process_start_time_since_boot); close(stat_fd); stat_fd=open("/proc/stat",O_RDONLY); if(stat_fd<0) { fprintf(stderr,"open() fail\n"); exit(1); } read_result=read(stat_fd,stat_buf,sizeof(stat_buf)); if(read_result<0) { fprintf(stderr,"read() fail\n"); exit(1); } if(read_result>=sizeof(stat_buf)) { fprintf(stderr,"stat_buf is too small\n"); exit(1); } close(stat_fd); field_begin=strstr(stat_buf,"btime ")-stat_buf+6; sscanf(stat_buf+field_begin,"%llu",&boot_time_since_epoch); process_start_time_since_epoch = boot_time_since_epoch+process_start_time_since_boot/jiffies_per_second; localtime_r(&process_start_time_since_epoch,&local_buf); gmtime_r (&process_start_time_since_epoch,&gm_buf ); printf("local time: %02d:%02d:%02d\n", local_buf.tm_hour, local_buf.tm_min, local_buf.tm_sec ); printf("UTC: %02d:%02d:%02d\n", gm_buf.tm_hour, gm_buf.tm_min, gm_buf.tm_sec ); sleep(1); } return 0; } /* main() */