来自C ++应用程序。为AIX,HP-UX,Linux,OSX和Solaris编译是有一种简单的方法来确定是否应用程序。系统启动后5分钟内是否正在运行?
在Windows上,我可以这样做:
// return true if OS has recently booted up
bool at_os_boot_time()
{
/* GetTickCount() returns the number of miliseconds since system start.
So "...the time will wrap around to zero if the system is run
continuously for 49.7 days" - so this function will erroneously
return true for a 5 minute period 49.7 days after boot */
return ::GetTickCount() < 5 * 60 * 1000;
}
我在Unix世界中找不到相应的东西。
答案 0 :(得分:3)
这是来自linux上的kernel.h:
struct sysinfo;
extern int do_sysinfo(struct sysinfo *info);
#endif /* __KERNEL__ */
#define SI_LOAD_SHIFT 16
struct sysinfo {
long uptime; /* Seconds since boot */
unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
unsigned long totalram; /* Total usable main memory size */
unsigned long freeram; /* Available memory size */
unsigned long sharedram; /* Amount of shared memory */
unsigned long bufferram; /* Memory used by buffers */
unsigned long totalswap; /* Total swap space size */
unsigned long freeswap; /* swap space still available */
unsigned short procs; /* Number of current processes */
unsigned short pad; /* explicit padding for m68k */
unsigned long totalhigh; /* Total high memory size */
unsigned long freehigh; /* Available high memory size */
unsigned int mem_unit; /* Memory unit size in bytes */
char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
};
答案 1 :(得分:2)
至少在Linux中,您可以使用sysinfo
system call。
答案 2 :(得分:2)
确定上次系统启动时间的最便携方法是使用getutxid()
ut_type
BOOT_TIME
来使用系统记帐数据来获取它。我认为你提到的所有系统都应该支持这一点,尽管它可能不是特别有效。您还可以调用uptime
,who
-b
或w
等命令行程序。
某些系统支持更有效的接口来获取此信息,但它将是特定于操作系统的。 Mac OS X(和FreeBSD)有sysctl()
CTL_KERN
KERN_BOOTTIME
。 HP-UX已pstat_getstatic()
。 Tru64具有table()
和TBL_SYSINFO参数。正如在另一个答案中提到的,Linux有sysinfo()
,但您也可以从/proc/uptime
(它是第一个数字)开始读取自启动以来的时间。