スポンサーリンク

KVM_GETPROCS(3) FreeBSD ライブラリ関数マニュアル KVM_GETPROCS(3)

名称

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

ライブラリ

カーネルデータアクセスライブラリ (libkvm, −lkvm)

書式

#include <kvm.h>
#include <sys/param.h>
#include <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 が指示するカーネルの動作中のプロセスの (サブ) 集合を 返します。 oparg の引数は,返されるプロセスの集合を制限する属性を構成 します。 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() はすべて異常終了時に NULL を返します。

バグ

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

関連項目

kvm(3), kvm_close(3), kvm_geterr(3), kvm_nlist(3), kvm_open(3), kvm_openfiles(3), kvm_read(3), kvm_write(3)

FreeBSD 10.0 June 4, 1993 FreeBSD 10.0

スポンサーリンク