tail head cat sleep
QR code linking to this page

Man page  — KTRACE

명칭

ktrace – 프로세스의 트레이스

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <sys/param.h>
#include <sys/time.h>
#include <sys/uio.h>
#include <sys/ktrace.h>

int
ktrace(const char *tracefile, int ops, int trpoints, int pid);

해설

ktrace() 함수는, 1 개(살) 또는 복수의 프로세스의 트레이스를 유효 또는 무효로 합니다. 유저는 자신의 프로세스만을 트레이스 할 수 있습니다. 슈퍼 유저만이, setuid 프로그램 또는 setgid 프로그램을 트레이스 할 수 있습니다.

tracefile (은)는, 트레이스에 사용하는 파일의 패스명을 지정합니다. 파일은 존재하고 있지 않으면 안되어, 호출측 프로세스에 의해 기입해 가능한 통상 파일일 필요가 있습니다. 트레이스 레코드는 모두 파일의 말미에 추가되므로, 직전의 트레이스 데이터를 잘라 버리기 위해서(때문에)는 파일의 길이를 0 으로 할 필요가 있습니다. 트레이스점이 무효인 경우 (후술의 KTROP_CLEAR 를 참조), tracefile (은)는 NULL 로 할 수 있습니다.

ops 파라미터는 요구된 ktrace 조작을 지정합니다. 정의되고 있는 조작은 다음과 같습니다.

KTROP_SET
trpoints 그리고 지정된 트레이스점을 유효하게 합니다.

KTROP_CLEAR
trpoints 그리고 지정된 트레이스점을 무효로 합니다.

KTROP_CLEARFILE
모든 트레이스를 정지합니다.

KTRFLAG_DESCEND
트레이스의 변경이, 지정의 프로세스와 그 현재의모든 child process에 적용됩니다.

trpoints 파라미터는 관심이 있는 트레이스점을 지정합니다. 정의되고 있는 트레이스점은 다음과 같습니다.

KTRFAC_SYSCALL
시스템 콜을 트레이스 합니다.

KTRFAC_SYSRET
시스템 콜로부터의 반환값을 트레이스 합니다.

KTRFAC_NAMEI
패스명의 탐색 조작을 트레이스 합니다.

KTRFAC_GENIO
모든 입출력을 트레이스 합니다(이 옵션이 대량의 출력을 생성할 가능성이 있는 것에 주의해 주세요).

KTRFAC_PSIG
포스트된 시그널을 트레이스 합니다.

KTRFAC_CSW
콘텍스트 스위칭을 트레이스 합니다.

KTRFAC_INHERIT
이 이후의 아이에게 트레이스를 계승합니다.

각 트레이스 이벤트는, 범용의 헤더의 뒤에 트레이스점에 고유의 원가요소가 계속되는 형식의 레코드를 출력합니다. 범용의 헤더는 다음과 같습니다.

struct ktr_header {
        int     ktr_len;                /* 버퍼의 길이 */
        short   ktr_type;               /* 트레이스 레코드의 타입 */
        pid_t   ktr_pid;                /* 프로세스 ID */
        char    ktr_comm[MAXCOMLEN+1];  /* 명령명 */
        struct  timeval ktr_time;       /* 타임 스탬프 */
        caddr_t ktr_buf;
};

ktr_len 필드는 이 헤더에 계속된다 ktr_type 데이터의 길이를 나타냅니다. ktr_pid 필드와 ktr_comm 필드는, 레코드를 생성한 프로세스와 명령을 나타냅니다. ktr_time 필드는, 레코드가 생성되었을 때 각을 (마이크로 세컨드 단위로) 나타냅니다. ktr_buf (은)는, 내부 커널 포인터로 있어 유용하지는 않습니다.

범용 헤더에는 ktr_len 바이트의 길이의 ktr_type 레코드가 계속됩니다. 타입에 고유의 레코드는 < sys/ktrace.h> 인클루드 파일내에서 정의되고 있습니다.

반환값

The ktrace function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

에러

ktrace() (은)는 다음의 경우에 실패합니다.
[ENOTDIR]
  패스의 원가요소중에 디렉토리 이외의 것이 포함되어 있습니다.
[ENAMETOOLONG]
  패스명의 원가요소가 255 캐릭터를 넘고 있는지, 또는 패스명 전체가 1023 캐릭터를 넘고 있습니다.
[ENOENT]
  지정의 트레이스 파일이 존재하지 않습니다.
[EACCES]
  전치패스명의 원가요소에 대해 검색 허가가 거부되고 있습니다.
[ELOOP]
  패스명을 변환할 경우에 검출된 기호 연결이 너무 많습니다.
[EIO] 파일 시스템에 읽고 쓰기하고 있는 동안에 입출력 에러가 발생했습니다.
[ENOSYS]
  커널이 ktrace 서포트와 함께 컴파일 되고 있지 않습니다.

관련 항목

kdump(1), ktrace(1)

역사

ktrace() 함수는 BSD 4.4 그리고 처음 등장했습니다.

KTRACE (2) June 4, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

How's my programming? Call 1-800-DEV-NULL