如何确定POSIX应用程序是否正确。系统启动后5分钟内运行?

时间:2009-09-03 09:06:23

标签: posix

来自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世界中找不到相应的东西。

3 个答案:

答案 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来使用系统记帐数据来获取它。我认为你提到的所有系统都应该支持这一点,尽管它可能不是特别有效。您还可以调用uptimewho -bw等命令行程序。

某些系统支持更有效的接口来获取此信息,但它将是特定于操作系统的。 Mac OS X(和FreeBSD)有sysctl() CTL_KERN KERN_BOOTTIME。 HP-UX已pstat_getstatic()。 Tru64具有table()和TBL_SYSINFO参数。正如在另一个答案中提到的,Linux有sysinfo(),但您也可以从/proc/uptime(它是第一个数字)开始读取自启动以来的时间。