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

名称

pmc_attach, pmc_detachプロセススコープ PMC のターゲットプロセスへのアタッチとデタッチ

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

int
pmc_attach( pmc_id_t pmcid, pid_t pid);

int
pmc_detach( pmc_id_t pmcid, pid_t pid);

解説

これらの関数は、プロセススコープ PMC によって追跡されたターゲットプロセスの組を制御します。

関数 pmc_attach() は、引数 pmcid によって指定されたプロセススコープ PMC を、引数 pid によって指定されたターゲットプロセスへアタッチするために使用されます。引数 pid は、現在のプロセスを示すために 0 であるかもしれません。 PMC が、修飾子 PMC_F_DESCENDANTS で割り付けられたなら、PMC は、さらに、指定されたターゲットプロセスの現在と将来の子孫にアタッチします。 PMC は、静かな状態 (すなわち、実行していない) にあるはずです。

関数 pmc_detach() は、引数 pid によって指定されたプロセスから、引数 pmcid によって指定されたプロセススコープ PMC をデタッチするために使用されます。引数 pid は、現在のプロセスを示すために 0 であるかもしれません。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

関数 pmc_attach() への呼び出しは、次のエラーで失敗します:
[ EBUSY]
引数 pmcid が、静かな状態でなかった PMC を指定しました。
[ EBUSY]
関数 pmc_attach によって指定されたターゲットプロセスは、同じ PMC ハードウェアリソースを使用する別のプロセススコープ PMC によって追跡されています。
[ EEXIST]
ターゲットプロセスは、指定された PMC によって既に追跡されています。
[ EINVAL]
引数 pmcid が、システムスコープで PMC を指定しました。
[ EINVAL]
引数 pid が、不正なプロセス ID を指定しました。
[ EINVAL]
現在のプロセスが、引数 pmcid で指定されたハンドルで PMC を所有していません。
[ EPERM]
呼び出し側が、PMC を指定されたターゲットプロセスにアタッチするために必要な特権を欠いていました。
[ EPERM]
(i386 と amd64 アーキテクチャ) 引数 pmcid によって指定された PMC が、自己測定のための RDPMC 命令の使用を許可するようにセットアップされています。
[ ESRCH]
現在のプロセスが、何も PMC を所有していません。
[ ESRCH]
引数 pid によって指定されたプロセスが、存在しませんでした。

関数 pmc_detach() への呼び出しは、次のエラーで失敗します:

[ EINVAL]
引数 pmcid が、システムスコープで PMC を指定しました。
[ EINVAL]
引数 pid が、不正なプロセス ID を指定しました。
[ EINVAL]
現在のプロセスが、引数 pmcid で指定されたハンドルで PMC を所有していません。
[ EINVAL]
指定された PMC が、ターゲットプロセスにアタッチされませんでした。
[ ESRCH]
現在のプロセスが、何も PMC を所有していません。
[ ESRCH]
引数 pid によって指定されたプロセスが、 hwpmc(4) によってモニタされていません。
[ ESRCH]
引数 pid によって指定されたプロセスが、存在しませんでした。
November 25, 2007 FreeBSD