当前位置: 首页 > news >正文

几种linux获取系统运行时间的方法

在开发 测试和运维中,获取系统运行时间是一个很重要的参数指标,下面是常用的获取系统时间的方法,以SKYLAB的SKW3000路由模组的运行时间为例进行说明:

一.通过指令获取

获取系统运行时间的指令为uptime,具体操作输出如下:

这个方法在运维中运用,方便直观。但是在开发过程中使用此命令获取系统时间,需要提取字段中的内容,不如通过其他方式获取方便,下面是文件获取的方法。

二.通过文件获取

在linux系统中,文件/proc/time包含了系统运行总秒数和空闲时间,内容如下图所示,前面为系统运行时间,后面为CPU处于空闲的时间:

[系统运行总秒数]:系统的运行时间信息,以S为单位,精确到小数点,表示系统从开机到当前时刻所经历的时长,图示为:933370.06;

[空闲时间]:它反映了系统没有进行任何有效工作,CPU处于空闲等待状态的累计时长,图示为:1787850.84。

在开发中,如日志记录等,可以通过读取文件的方式获取系统运行时间。下面是两种通过文件获取系统运行时间的方法。

(1)通过Shell获取系统时间的方法

下面是具体的源码:

#!/bin/sh

uptime_seconds=$(cat /proc/uptime | cut -d. -f1)

days=$((uptime_seconds / (24 * 60 * 60)))
uptime_seconds=$((uptime_seconds % (24 * 60 * 60)))
hours=$((uptime_seconds / (60 * 60)
uptime_seconds=$((uptime_seconds % (60 * 60)))
minutes=$((uptime_seconds / 60))
seconds=$((uptime_seconds % 60))

echo "系统运行时间: $days 天 $hours 小时 $minutes 分钟 $seconds 秒"

运行结果如下:

(2)下面是通过C语言获取系统时间的方法

具体源码如下:

#include <stdio.h>
#include <stdlib.h>

void get_run_time(char *time)
{
    FILE *fp;
    double uptime_seconds;
    int days, hours, minutes, seconds;

    // 打开 /proc/uptime 文件
    fp = fopen("/proc/uptime", "r");
    if (fp == NULL) {
        perror("无法打开 /proc/uptime 文件");
        return;
    }

    // 读取系统运行的总秒数
    fscanf(fp, "%lf", &uptime_seconds);
    fclose(fp);

    // 计算天、时、分、秒
    days = (int)uptime_seconds / (24 * 60 * 60);
    uptime_seconds = (int)uptime_seconds % (24 * 60 * 60);
    hours = (int)uptime_seconds / (60 * 60);
    uptime_seconds = (int)uptime_seconds % (60 * 60);
    minutes = (int)uptime_seconds / 60;
    seconds = (int)uptime_seconds % 60;

    if (days > 0) {
        sprintf(time, "%dday%dh%dm%ds", days, hours, minutes, seconds);
    } else if(hours > 0) {
        sprintf(time, "%dh%dm%ds", hours, minutes, seconds);
    } else if(minutes > 0) {
        sprintf(time, "%dm%ds", minutes, seconds);
    } else {
        sprintf(time, "%ds", seconds);
    }
}

int main(void)
{
    char run_time[32] = {0};
    get_run_time(run_time);
    printf("Time:%s\r\n", run_time);
}

运行结果如下:

http://www.dtcms.com/a/61843.html

相关文章:

  • Webservice创建
  • 技术进阶:数字人分身克隆系统源码+DeepSeek,实现前沿虚拟数字人应用的交互升级
  • 02.06、回文链表
  • 《深入浅出数据索引》- 公司内部培训课程笔记
  • 【MySQL_04】数据库基本操作(用户管理--配置文件--远程连接--数据库信息查看、创建、删除)
  • 【2025年28期免费获取股票数据API接口】实例演示五种主流语言获取股票行情api接口之沪深A股强势股池数据获取实例演示及接口API说明文档
  • 面试java做了一道逻辑题,人麻了
  • 你使用过哪些 Java 并发工具类?
  • 《人月神话》:软件工程的成本寓言与生存法则
  • 自动解单色数织程序(基于Python和Ortools)
  • 无人机的飞行路径规划之CH-PPO算法(思考)
  • 面试之《vue常见考题》
  • MySQL环境安装详细教程(Windows/macOS/Linux)
  • Spring 的三种注入方式?
  • 代码随想录刷题day42|(二叉树篇)二叉树的最小深度(递归)+完全二叉树结点个数
  • Java反射与动态代理:框架设计的基石
  • Spring WebFlux:响应式编程
  • 文字转语音chat-tts-ui
  • 分布式锁—Redisson的同步器组件
  • MySQL中 IN 到底走不走索引?
  • win10安装部署DB-gpt,坑多
  • mac使用Homebrew安装miniconda(mac搭建python环境),并在IDEA中集成miniconda环境
  • 20天 - TCP 和 UDP 有什么区别?说说 TCP 的三次握手?TCP 是用来解决什么问题?
  • Python中很常用的100个函数整理
  • React基础之类组件
  • XSENS:科幻电影《Love me》使用动作捕捉技术将未来AI拟人化
  • STM32初始安装
  • 2019年蓝桥杯第十届CC++大学B组真题及代码
  • Python 机器学习小项目:手写数字识别(MNIST 数据集)
  • Neo4j 数据库备份