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

ops/2025/3/14 18:42:24/

在开发 测试和运维中,获取系统运行时间是一个很重要的参数指标,下面是常用的获取系统时间的方法,以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/ops/165737.html

相关文章

京存助力大型工业制造数字化

工业制造作为实体产业基础的一部分&#xff0c;在国民经济中发挥着举足轻重的作用。各行各业都在谈数字化转型&#xff0c;工业制造业更是数字化转型的重中之重。数字化不仅是将技术运用到生产过程中&#xff0c;更能在数字化的过程中不断积累和形成数字资产&#xff0c;围绕数…

vscode接入DeepSeek 免费送2000 万 Tokens 解决DeepSeek无法充值问题

1. 在vscode中安装插件 Cline 2.打开硅基流动官网 3. 注册并登陆&#xff0c;邀请码 WpcqcXMs 4.登录后新建秘钥 5. 在vscode中配置cline (1) API Provider 选择 OpenAI Compatible &#xff1b; (2) Base URL设置为 https://api.siliconflow.cn](https://api.siliconfl…

Python:函数(一)

python函数相关的知识点 1. 函数定义与调用 定义&#xff1a;使用 def 关键字&#xff0c;后接函数名和参数列表。 def greet(name):"""打印问候语&#xff08;文档字符串&#xff09;"""print(f"Hello, {name}!") 调用&#xff1a…

98. 验证二叉搜索树

文章目录 题目代码原理图方法及解释小结 题目 二叉树&#xff1a;验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前…

《黑客攻防从入门到精通:工具篇》全15章万字深度总结——从工具解析到实战攻防,构建完整网络安全知识体系

目录 一、书籍核心逻辑与学习路径 二、核心模块与工具深度解析 模块1&#xff1a;信息收集与网络扫描 模块2&#xff1a;渗透测试与漏洞利用 模块3&#xff1a;密码攻防与身份认证 模块4&#xff1a;恶意程序攻防 模块5&#xff1a;网络追踪与反追踪 模块6&#xff1a;系…

Java Spring Boot 常用技术及核心注解

一、常用技术 自动配置&#xff08;Auto-Configuration&#xff09; Spring Boot 根据类路径中的依赖自动配置应用程序。例如&#xff0c;引入spring-boot-starter-web会自动配置内嵌 Tomcat 和 Spring MVC。 EnableAutoConfiguration // 启用自动配置起步依赖&#xff08;Sta…

汽车NVH诊断案例 | 纯电车急加速过大弯底盘异响

引言 失去发动机的掩蔽效应后&#xff0c;新能源电车的NVH问题&#xff0c;成为了困扰维修技师新难点。风噪、胎噪、电机高频啸叫等问题更容易车主识别&#xff0c;根源却难以被有效分辨。如何更精准且高效地识别电车NVH问题根源&#xff1f;今天分享的这个案例&#xff0c;内…

【架构艺术】Go语言微服务monorepo的代码架构设计

近期因为项目架构升级原因&#xff0c;笔者着手调研一些go项目monorepo的代码架构设计&#xff0c;目标是长期把既有微服务项目重要的部分都转移到monorepo上面&#xff0c;让代码更容易维护&#xff0c;协作开发更加方便。虽然经验不多&#xff0c;但既然有了初步的调研&#…