CLOCK_GETCPUCLOCKID - Linux手册页

时间:2019-08-20 18:00:02  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2020-06-09

名称

clock_getcpuclockid-获取进程CPU时间时钟的ID

语法

#包括

int clock_getcpuclockid(pid_t pid, clockid_t *clockid);

与-lrt链接(仅适用于2.17之前的glibc版本)。

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

clock_getcpuclockid():

_POSIX_C_SOURCE>= 200112L

说明

clock_getcpuclockid()函数获取ID为pid的进程的CPU时间时钟的ID,并将其返回到clockid指向的位置。如果pid为零,则返回调用进程的CPU时间时钟的时钟ID。

返回值

成功时,clock_getcpuclockid()返回0;否则,返回0。如果出现错误,它将返回ERRORS中列出的正错误号之一。

错误说明

ENOSYS
内核不支持获取另一个进程的每个进程的CPU时间时钟,并且pid不指定调用进程。
EPERM
调用者无权访问pid指定的进程的CPU时间时钟。 (在POSIX.1-2001中指定;在Linux上不会发生,除非内核不支持获取另一个进程的每个进程的CPU时间时钟。)
ESRCH
ID pid没有进程。

版本

从2.2版开始,glibc中提供了clock_getcpuclockid()函数。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
clock_getcpuclockid()Thread safetyMT-Safe

遵循规范

POSIX.1-2001,POSIX.1-2008。

备注

使用pid为0的clock_getcpuclockid()调用获得的时钟ID调用clock_gettime(2)与使用时钟ID CLOCK_PROCESS_CPUTIME_ID相同。

示例

下面的示例程序获取在命令行上给出其ID的进程的CPU时间时钟ID,然后使用clock_gettime(2)获取该时钟上的时间。运行示例如下:

$ ./a.out 1                 # Show CPU clock of init process
CPU-time clock for PID 1 is 2.213466748 seconds

Program source

#define _XOPEN_SOURCE 600
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>

int
main(int argc, char *argv[])
{
    clockid_t clockid;
    struct timespec ts;

    if (argc != 2) {
        fprintf(stderr, "%s <process-ID>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    if (clock_getcpuclockid(atoi(argv[1]), &clockid) != 0) {
        perror("clock_getcpuclockid");
        exit(EXIT_FAILURE);
    }

    if (clock_gettime(clockid, &ts) == -1) {
        perror("clock_gettime");
        exit(EXIT_FAILURE);
    }

    printf("CPU-time clock for PID %s is %ld.%09ld seconds\n",
            argv[1], (long) ts.tv_sec, (long) ts.tv_nsec);
    exit(EXIT_SUCCESS);
}

另外参见

clock_getres(2),timer_create(2),pthread_getcpuclockid(3),time(7)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/