KVM_GETPROCS(3)

명칭
kvm_getprocs, kvm_getargv, kvm_getenvv - 유저 프로세스 상태에 액세스 한다

프로그램 라이브러리
libkvm

서식
<kvm.h> <sys/param.h> <sys/sysctl.h> struct kinfo_proc * kvm_getprocs(kvm_t *kd, int op, int arg, int *cnt) char ** kvm_getargv(kvm_t *kd, const struct kinfo_proc *p, int nchr) char ** kvm_getenvv(kvm_t *kd, const struct kinfo_proc *p, int nchr)

해설
kvm_getprocs() 하 kd 하지만 지시하는 커널의 동작중의 프로세스의 (서브) 집합을 돌려줍니다. op (와)과 arg 의 인수는, 돌려주어지는 프로세스의 집합을 제한하는 속성을 구성합니다. op 의 값은 이하의 필터링 속성을 기술하고 있습니다 :

KERN_PROC_ALL
    모든 프로세스
KERN_PROC_PID
    프로세스 ID arg (을)를 가지는 프로세스
KERN_PROC_PGRP
    프로세스 그룹 arg (을)를 가지는 프로세스
KERN_PROC_SESSION
    세션 arg (을)를 가지는 프로세스
KERN_PROC_TTY
    tty arg (을)를 가지는 프로세스
KERN_PROC_UID
    실효 유저 ID arg (을)를 가지는 프로세스
KERN_PROC_RUID
    열매 유저 ID arg (을)를 가지는 프로세스

찾아낸 프로세스수는 참조 파라미터 cnt 그리고 돌려주어집니다. 프로세스는 kinfo_proc 구조체의 연속 배열로서 돌려주어집니다. 이 메모리는 국소적으로 할당할 수 있어 kvm_getprocs() (와)과 kvm_close() 에 계속하는 호출은 이 기억역에 덧쓰기합니다.

kvm_getargv() (은)는 눌로 종료하는 인수 벡터를 돌려줍니다. 이 벡터는 p 하지만 가리키는 프로세스에게 건네진 명령행 인수에 대응합니다. 아마, 이러한 인수는 프로세스 생성시의 exec(3) 에게 건네진 값에 상당합니다. 그렇지만, 이 정보는, 고의로 프로세스 자신의 컨트롤하에 있습니다. 오리지날의 명령명은, kvm_getprocs() 에 의해 돌려주어진 프로세스 구조체의 p_comm 필드에, 변경되어 있지 않은 상태로 찾아낼 수가 있습니다.

nchr 인수는 누르바이트를 포함한 최대의 캐릭터수를 나타내, 캐릭터 라인의 구축에 사용합니다. 만약 이 양을 넘어 버리면, 오버플로우의 원인이 되는 캐릭터 라인은 잘라 버릴 수 있어 결과가 부분적으로 돌려주어집니다. 이것은 ps(1) (이)나 w(1) (와)과 같은 프로그램에 있어서는 간편한 방법입니다. 이러한 프로그램에 대해서는, 명령의 1 행 요약만을 인자하기 때문에, 무시하기 위한 봐에 다량의 텍스트를 복사해야 하지는 않습니다. nchr 하지만 0 이라면, 어떤 제한은 부과되지않고, 모든 인수의 캐릭터 라인은 전부 그대로 돌려주어집니다.

argv 포인터와 캐릭터 라인 기억역에 할당할 수 있었던 메모리는, kvm 프로그램 라이브러리에 의해 소유됩니다. 계속한다 kvm_getprocs() (와)과 kvm_close(3) 호출은 이 기억역을 가차 없이 사용합니다.

kvm_getenvv() 함수는 kvm_getargv() 에 유사하고 있습니다만, 환경 캐릭터 라인의 벡터를 돌려줍니다. 이 데이터는 또 프로세스에 의해 변경 가능합니다.

반환값
kvm_getprocs(), kvm_getargv(), 및 kvm_getenvv() (은)는 모두 이상종료(ABEND)시에 NULL (을)를 돌려줍니다.

버그
이러한 routine는 kvm 인터페이스에 속하고 있지 않습니다.

관련 항목
kvm(3), kvm_close(3), kvm_geterr(3), kvm_nlist(3), kvm_open(3), kvm_openfiles(3), kvm_read(3), kvm_write(3)