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

  • Post author:
  • Post category:linux


在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

)交流学习。



版权声明:本文为chen1415886044原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。