tail head cat sleep
QR code linking to this page

manページ  — KVM_GETPROCS

名称

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

内容

ライブラリ

Kernel Data Access Library (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)

KVM_GETPROCS (3) June 4, 1993

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

How do you pronounce UNIX ? You Nix !