Linux下系统运行时间(uptime)命令使用及代码实现

在Linux系统中,一切都可以通过命令行命令来控制。 从小任务到大任务,您都可以找到一个简单的命令来完成您的工作。如果您是 Linux 新手,并且对系统管理感兴趣,那么您需要对命令行有扎实的了解。在本文中,我们将使用一些易于理解的示例来讨论此命令的基础知识。 最后附上uptime代码实现。

如何使用 uptime 命令

我们知道,uptime 命令为您提供系统启动(或运行)的时间。除了系统的运行时间,您还可以获得系统的其他详细信息,包括当前时间、运行会话的用户数以及过去 1、5 和 15 分钟的系统平均负载。

uptime [options]

uptime 的基本用法非常简单——只需输入命令名称并按回车键即可。

在这里插入图片描述

通过命令行运行 Linux 系统的 uptime 命令,会输出以下信息。

  1. 系统的当前时间。
  2. 系统的总正常运行时间。
  3. 当前正在运行系统的活动用户。
  4. 过去 1、5 和 15 分钟内可用的系统负载的平均值。

“up”表示系统正在运行。

这里的系统负载平均值是处于可运行状态或可运行状态的平均进程数不间断状态。 处于可运行状态的进程要么正在使用 CPU,要么正在等待使用中央处理器。 处于不可中断状态的进程正在等待某些 I/O 访问,例如等待磁盘。

如何查看uptime帮助信息

uptime 命令带有各种选项。 要检查选项,我们可以运行 help 命令。

在这里插入图片描述

除了 help 命令,您还可以运行 man 命令来检查“uptime”命令的使用情况。

在这里插入图片描述

如何让工具以漂亮的格式显示时间

如果您只想知道系统已启动的时间,并且以更易于阅读的格式知道,请使用 -p 命令行选项。

uptime -p

在这里插入图片描述

您可以获得非常清晰的输出,以天数、小时数、分钟数和秒数的格式显示正常运行时间。

我们还可以使用“-s”选项在命令行界面上运行以下命令。
在这里插入图片描述

显示的信息来看,检查系统首次启动的确切时间,而不是自启动以来花费的时间。

uptime代码实现

void getloadavg(char *loadavg, size_t nelem)
{
    char command[512] = {0};
    snprintf(command, sizeof(command), "%s |%s %s|%s -F: '%s'", "w","grep", "load", "awk","{print $4}");
    FILE *fp = popen(command, "r");
    if (fp == NULL)
	{
		printf("popen failed!\n");
		return;
	}

    fread(loadavg, nelem-1, 1, fp);
    fclose(fp);
}


static void print_uptime(void)
{
	FILE *fp;
	time_t time_now;
	time_t uptime = 0;
	long int updays;
	int uphours;
	int upmins;
	struct tm *tmn;
	struct utmp *u;
	int utmp_num = 0;
	char sz_loadavg[64] = {0};
	fp = fopen ("/proc/uptime", "r");
	if (fp != NULL)
	{
		char buf[BUFSIZ];
		char *b = fgets (buf, BUFSIZ, fp);
		if (b != NULL)
		{
			char *end_ptr;
			double upsecs = strtod (buf, &end_ptr);
			//printf("buf: %s\n",buf);
			//printf("end_ptr: %s\n",end_ptr);
			if (buf != end_ptr)
			uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
					  ? upsecs : -1);
		}

		fclose (fp);
	}
	
	while((u = getutent()))
    {
		
        if(u->ut_type == USER_PROCESS)
		{
			++utmp_num;
            //printf("%d %s %s %s \n", u->ut_type, u->ut_user, u->ut_line, u->ut_host);
		}
		
    }
	
	
	time_now = time (NULL);

	if (uptime == 0)
	{
		printf("couldn't get boot time\n");
	}
	updays = uptime / 86400;
	uphours = (uptime - (updays * 86400)) / 3600;
	upmins = (uptime - (updays * 86400) - (uphours * 3600)) / 60;
	tmn = localtime (&time_now);
	//printf("uphours: %d\n",uphours);
	//printf("upmins: %d\n",upmins);

	printf("%2d:%2d:%2d\t", tmn->tm_hour, tmn->tm_min, tmn->tm_sec); /* 这将打印当前时钟时间 */
	printf("up %2d:%2d\t",uphours,upmins);
	printf("%lu users\t",utmp_num);
	
	getloadavg(sz_loadavg,sizeof(sz_loadavg));
	printf ("load average: %s\t",sz_loadavg);
}

运行结果

在这里插入图片描述

当前输出以下信息:当前时间,系统多长时间已运行,当前登录的用户数,以及过去的系统平均负载1、5 和 15 分钟。

总结

uptime命令易于理解和使用。 它不提供很多功能(或命令行选项),希望本篇文章对你有帮助,如果你有任何疑问,可以查看man手册。

欢迎关注微信公众号【程序猿编码】,需要源代码欢迎添加本人微信号(17865354792)交流学习。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值