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

server/2025/3/12 1:43:20/

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

一.通过指令获取

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

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

二.通过文件获取

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

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

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

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

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

下面是具体的源码:

#!/bin/shuptime_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.ppmy.cn/server/174313.html

相关文章

代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II

108. 冗余连接 题目链接&#xff1a;KamaCoder 文档讲解&#xff1a;代码随想录 状态&#xff1a;AC Java代码&#xff1a; import java.util.*;class Main {public static int[] father;public static void main(String[] args) {Scanner scan new Scanner(System.in);int n…

手写一个Tomcat

Tomcat 是一个广泛使用的开源 Java Servlet 容器&#xff0c;用于运行 Java Web 应用程序。虽然 Tomcat 本身功能强大且复杂&#xff0c;但通过手写一个简易版的 Tomcat&#xff0c;我们可以更好地理解其核心工作原理。本文将带你一步步实现一个简易版的 Tomcat&#xff0c;并深…

uniapp 微信小程序 升级 uniad插件版本号

问题描述&#xff1a; 每次提交代码升级的时候会弹窗提示&#xff1a;uniad插件版本太低… 解决办法 一、使用微信小程序开发工具点击右上角 查看到最新版本&#xff1a;1.3.4 二、在app.json中改为最新的版本即可 "uni-ad": {"version": "1.3.4&q…

20天 - TCP 和 UDP 有什么区别?说说 TCP 的三次握手?TCP 是用来解决什么问题?

TCP 和 UDP 有什么区别&#xff1f; TCP&#xff08;传输控制协议&#xff09;和 UDP&#xff08;用户数据报协议&#xff09;都是传输层的网络协议&#xff0c;它们的主要区别如下&#xff1a; 连接方式 TCP&#xff1a;面向连接的协议&#xff0c;类似于打电话&#xff0c…

深度学习之卷积神经网络(CNN)

引言 卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09;是深度学习领域最具革命性的技术之一&#xff0c;尤其在图像处理、计算机视觉和模式识别任务中表现卓越。自2012年AlexNet在ImageNet竞赛中一鸣惊人以来&#xff0c;CNN逐渐成为人工智能领域的核…

使用 MyBatis-Plus 实现数据库的多租户管理

在现代 SaaS&#xff08;软件即服务&#xff09;应用中&#xff0c;多租户架构是一种常见的设计模式。它允许多个租户共享同一个应用实例&#xff0c;同时确保每个租户的数据相互隔离。MyBatis-Plus 提供了强大的多租户支持&#xff0c;能够帮助开发者轻松实现多租户管理。本文…

C#常用的循环语句

在C#中&#xff0c;循环是一种控制结构&#xff0c;用于重复执行一组语句直到满足特定条件。C#提供了几种循环结构&#xff0c;包括for循环、while循环、do-while循环和foreach循环。每种循环都有其特定的用途和场景。下面我将逐一介绍这些循环的用法。 一、C#循环类型 1. fo…

使用PySpark进行大数据处理与机器学习实战指南

1. 技术介绍 1.1 PySpark概述 PySpark是Apache Spark的Python API&#xff0c;它结合了Python的易用性和Spark的分布式计算能力&#xff0c;能够高效处理PB级数据集。Spark基于内存计算的特性使其比传统Hadoop MapReduce快10-100倍&#xff0c;支持流处理、SQL查询、机器学习…