-
Notifications
You must be signed in to change notification settings - Fork 7
clock_getcpuclockid(3)
Seonghun Lim edited this page Oct 13, 2019
·
5 revisions
clock_getcpuclockid - 프로세스 CPU 시간 클럭의 ID 얻기
#include <time.h>
int clock_getcpuclockid(pid_t pid, clockid_t *clock_id);
-lrt
로 링크 (glibc 버전 2.17 전에서만).
glibc 기능 확인 매크로 요건 (feature_test_macros(7) 참고):
-
clock_getcpuclockid()
: _POSIX_C_SOURCE >= 200112L
clock_getcpuclockid()
함수는 ID가 pid
인 프로세스의 CPU 시간 클럭의 ID를 얻어서 clock_id
가 가리키는 위치로 반환한다. pid
가 0이면 호출 프로세스의 CPU 시간 클럭의 클럭 ID를 반환한다.
성공 시 clock_getcpuclockid()
는 0을 반환한다. 오류 시 ERRORS 절에 나열된 양수 오류 번호 중 하나를 반환한다.
ENOSYS
- 커널이 다른 프로세스의 프로세스별 CPU 시간 클럭 얻기를 지원하지 않는데
pid
가 호출 프로세스를 지정하고 있지 않다. EPERM
-
pid
로 지정한 프로세스의 CPU 시간 클럭에 접근할 권한을 호출자가 가지고 있지 않다. (POSIX.1-2001에서 명세함. 리눅스에서는 커널이 다른 프로세스의 프로세스별 CPU 시간 클럭 얻기를 지원하지 않는 경우가 아니라면 발생하지 않음.) ESRCH
- ID가
pid
인 프로세스가 없다.
glibc 버전 2.2부터 clock_getcpuclockid()
함수가 사용 가능하다.
이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.
인터페이스 | 속성 | 값 |
---|---|---|
clock_getcpuclockid() |
스레드 안전성 | MT-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 # init 프로세스의 CPU 클럭 보기
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);
}
clock_getres(2), timer_create(2), pthread_getcpuclockid(3), time(7)
2019-03-06