clock_getcpuclockid — obtain ID of a process CPU-time clock
#include <time.h>
int
clock_getcpuclockid( |
pid_t pid, |
clockid_t *clock_id) ; |
![]() |
Note | ||
---|---|---|---|
|
![]() |
Note |
---|---|
Link with |
The clock_getcpuclockid
()
function obtains the ID of the CPU-time clock of the process
whose ID is pid
, and
returns it in the location pointed to by clock_id
. If pid
is zero, then the clock ID
of the CPU-time clock of the calling process is returned.
On success, clock_getcpuclockid
() returns 0; on error,
it returns one of the positive error numbers listed in
ERRORS.
The kernel does not support obtaining the
per-process CPU-time clock of another process, and
pid
does not
specify the calling process.
The caller does not have permission to access the
CPU-time clock of the process specified by pid
. (Specified as an
optional error in POSIX.1-2001; does not occur on Linux
unless the kernel does not support obtaining the
per-process CPU-time clock of another process.)
There is no process with the ID pid
.
Calling clock_gettime(2) with the
clock ID obtained by a call to clock_getcpuclockid
() with a pid
of 0, is the same as using
the clock ID CLOCK_PROCESS_CPUTIME_ID
.
The example program below obtains the CPU-time clock ID of the process whose ID is given on the command line, and then uses clock_gettime(2) to obtain the time on that clock. An example run is the following:
$ ./a.out 1 # Show CPU clock of init process CPU-time clock for PID 1 is 2.213466748 seconds
#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); }