EN JA
KVM_GETPROCS(3)
KVM_GETPROCS(3) FreeBSD Library Functions Manual KVM_GETPROCS(3)

名称

kvm_getprocs, kvm_getargv, kvm_getenvvユーザプロセス状態にアクセスする

ライブラリ

Kernel Data Access Library (libkvm, -lkvm)

書式

#include < kvm.h>
#include < sys/param.h>
#include < sys/sysctl.h>
#include < sys/user.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 で示されるカーネルの動作中のプロセスの (サブ) セット (集合) を返します。 oparg 引数は、返されるプロセスのセットを制限する述語を構成します。 op の値は以下のフィルタリング述語を記述しています。

KERN_PROC_ALL
すべてのプロセスとカーネルの可視スレッド
KERN_PROC_PROC
スレッドを除く、すべてのプロセス
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 を持つプロセス
KERN_PROC_INC_THREAD
プロセス ID、プロセスグループ、TTY、ユーザ ID、と実ユーザ ID によってフィルタリングされるとき、すべてのカーネルの可視スレッドを返す修飾子。

見つけたプロセス数は参照パラメータ cnt で返されます。プロセスは、kinfo_proc 構造体の連続する配列として返されます。このメモリは、局所的に割り付けられ、 kvm_getprocs() と kvm_close() に引き続く呼び出しはこの記憶域に上書きします。

kvm_getargv() 関数は、 p が示すプロセスに渡されたコマンドライン引数に対応する、 NULL で終了する引数ベクタを返します。おそらく、これらの引数はプロセス生成時の exec(3) に渡された値に相当します。しかしながら、この情報は、故意にプロセス自身のコントロール下にあります。オリジナルのコマンド名は、 kvm_getprocs() によって返されたプロセス構造体の p_comm フィールドに、変更されていない状態で見つけることができることに注意してください。

nchr 引数はヌルバイトを含めて文字列の構築に使われる最大の文字数を示します。もしこの量を超えたなら、オーバフローを起こした文字列は切り捨てられ、部分的な結果が返されます。これはコマンドの 1 行要約のみをプリントする ps(1)w(1) のようなプログラムには手軽です。そして、無視するためのみに多量のテキストを複写すべきではありません。 nchr が 0 ならば、なんら制限はつけられませんし、すべての引数の文字列はそっくりそのまま返されます。

argv ポインタと文字列記憶域に割り付けられたメモリは、 kvm ライブラリによって所有されます。引き続く kvm_getprocs() と kvm_close(3) 呼び出しはこの記憶域を消去して壊します。

kvm_getenvv() 関数は、 kvm_getargv() に類似していますが、環境文字列のベクタを返します。またこのデータはプロセスにより変更可能です。

戻り値

kvm_getprocs(), kvm_getargv() と kvm_getenvv() 関数は、失敗すれば、 NULL を返します。

バグ

これらのルーチンは、kvm インタフェースに属していません。
November 22, 2011 FreeBSD