表 25–1 では、proc プローブについて説明します。
表 25–1 proc プローブ
プローブ |
説明 |
---|---|
create |
fork(2)、forkall(2)、fork1(2)、vfork(2) のいずれかを使ってプロセスが作成されたときに起動するプローブ。args[0] は、新しい子プロセスの psinfo_t をポイントしています。vfork とその他の fork のバリエーションとの違いは、フォークスレッドの lwpsinfo_t で、pr_flag メンバー内の PR_VFORKP を調べるとわかります。fork1 と forkall との違いは、親プロセスの psinfo_t (curpsinfo) と子プロセスの psinfo_t (args[0]) の両方の pr_nlwp メンバーを調べるとわかります。create プローブはプロセスが正常に作成されてから起動します。また、LWP はプロセスの作成時に作成されます。このため、まずプロセス作成時に作成された LWP に対して lwp-create が起動し、その後、新しいプロセスに対して create プローブが起動します。 |
exec |
exec(2) システムコールのバリエーション、exec(2)、execle(2)、execlp(2)、execv(2)、execve(2)、execvp(2) のいずれかを使って、プロセスが新しいプロセスイメージをロードするときに起動するプローブ。exec プローブは、プロセスイメージがロードされる前に起動します。したがって、execname、curpsinfo などのプロセス変数には、イメージがロードされる前のプロセス状態が格納されます。exec プローブの起動後しばらくすると、同じスレッド内で exec-failure プローブか exec-success プローブが起動します。args[0] は、新しいプロセスイメージのパスをポイントします。 |
exec-failure |
exec(2) のバリエーションのいずれかが失敗したときに起動するプローブ。exec-failure プローブは、同じスレッド内で exec プローブが起動したあとでのみ起動します。args[0] には、errno(3C) の値が入ります。 |
exec-success |
exec(2) のバリエーションのいずれかが成功したときに起動するプローブ。exec-success も、exec-failure プローブと同じように、同じスレッド内で exec プローブが起動したあとでのみ起動します。exec-success プローブが起動したときにはすでに、execname、curpsinfo などのプロセス変数には、新しいプロセスイメージがロードされたあとのプロセス状態が格納されています。 |
exit |
現在のプロセスが終了する直前に起動するプローブ。終了理由を表す SIGCHLD siginfo.h(3HEAD) コードが、args[0] に格納されます。 |
fault |
スレッドがマシンフォルトを検出したときに起動するプローブ。args[0] には、proc(4) に定義されているようにフォルトコードが格納されます。args[1] は、このフォルトの siginfo 構造体をポイントします。fault プローブをトリガーできるのは、シグナルを発行するフォルトだけです。 |
lwp-create |
LWP の作成時に起動するプローブ。LWP は、通常、thr_create(3C) の結果として作成されます。args[0] は、新しいスレッドの lwpsinfo_t をポイントしています。args[1] は、このスレッドが含まれているプロセスの psinfo_t をポイントしています。 |
lwp-start |
新しく作成された LWP のコンテキストで起動するプローブ。lwp-start プローブは、ユーザーレベルの命令が実行される前に起動します。LWP がプロセス内の最初の LWP である場合は、まず start プローブが起動し、続いて lwp-start プローブが起動します。 |
lwp-exit |
シグナル、または thr_exit(3C) の明示的な呼び出しによって、LWP が終了する直前に起動するプローブ。 |
signal-discard |
シングルスレッドプロセスに送信されたシグナルが、プロセスによってブロックされず、かつ無視されたときに、起動するプローブ。この条件下では、シグナルは作成後すぐに破棄されます。ターゲットプロセスとスレッドの lwpsinfo_t と psinfo_t は、それぞれ args[0] と args[1] に格納されます。シグナル番号は args[2] に格納されます。 |
signal-send |
スレッドまたはプロセスにシグナルが送信されたときに起動するプローブ。signal-send プローブは、送信側のプロセスとスレッドのコンテキストで起動します。受信側のプロセスとスレッドの lwpsinfo_t と psinfo_t は、それぞれ args[0] と args[1] に格納されます。シグナル番号は args[2] に格納されます。signal-send の起動後は、受信側のプロセスとスレッド内の signal-handle または signal-clear が必ず起動します。 |
signal-handle |
スレッドがシグナルを処理する直前に起動するプローブ。signal-handle プローブは、シグナルを処理するスレッドのコンテキストで起動します。シグナル番号は args[0] に格納されます。シグナルの siginfo_t 構造体のポインタは、args[1] に格納されます。siginfo_t 構造体がない場合またはシグナルハンドラに SA_SIGINFO フラグが設定されていない場合は、args[1] の値は NULL です。プロセス内のシグナルハンドラのアドレスは、args[2] に格納されます。 |
signal-clear |
ターゲットスレッドが sigwait(2)、sigwaitinfo(3RT)、sigtimedwait(3RT) のいずれかでシグナルを待機しているために、保留状態のシグナルが消去されるとき、起動するプローブ。この条件に当てはまる場合、保留状態のシグナルが消去され、呼び出し側にシグナル番号が返されます。シグナル番号は args[0] に格納されます。signal-clear は、待機していたスレッドのコンテキストで起動します。 |
start |
新しく作成されたプロセスのコンテキストで起動するプローブ。start プローブは、プロセス内でユーザーレベルの命令が実行される前に起動します。 |