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 で示されるカーネルの動作中のプロセスの (サブ) セット (集合) を返します。 op と arg 引数は、返されるプロセスのセットを制限する述語を構成します。 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(3), kvm_close(3), kvm_geterr(3), kvm_nlist(3), kvm_open(3), kvm_openfiles(3), kvm_read(3), kvm_write(3)バグ
これらのルーチンは、kvm インタフェースに属していません。November 22, 2011 | FreeBSD |