proch_reg カーネル・サービス

目的

コールアウト・ハンドラーを登録します。

構文

#include <sys/proc.h>
int proch_reg(struct prochr *)
注:prochr構造体には以下の要素が含まれており、proch_regを呼び出す前に設定する必要がある:
void (* proch_handler)(struct prochr *, int, long)
unsigned int
  int prochr_mask

パラメーター

項目 説明
整数 prochr_mask コールアウトが要求されるカーネル・イベントのセットを指定します。 old_style インターフェースとは異なり、コールアウトは指定されたイベントに対してのみ呼び出されます。 このマスクは、以下の定義値のいずれかを OR で結合することによって形成されます。 
プロチャー初期化
プロセスが作成されました。
プログラム終了
プロセスが終了しました
PROCHR_EXEC
プロセスが exec システム・コールを発行しました
prochr_threadinit
作成されたスレッド
prochr_threadterm
スレッドが終了しました
proch_handler 指定されたカーネル・イベントが発生したときに呼び出されるコールアウト関数を指定します。

説明

同じstruct prochr *が複数回登録された場合、カーネルに保持されるのは最も最近に指定された情報のみである。

struct prochr *はメモリ上の新しい場所にコピーされない。 その結果、構造が変更されると、結果は予測不能になります。 この構造体は固定する必要はありません。

新しいスタイルのインターフェースの主な考慮事項は、スケーラビリティーを向上させることです。 ロックは、コールアウトが行われたときにのみ獲得されます。 現在登録されているすべてのコールアウト・イベント・タイプの要約マスクが維持されます。 このサマリー・マスクは、同一のstruct prochr * を登録する場合でも、proch_regまたはproch_unregが呼ばれるたびに更新される。 さらに、ロックは複合ロックであるため、いったんコールアウトが登録されると、ロックは読み取り専用で保持されるため、コールアウトの呼び出しでロック競合は発生しません。

登録済みハンドラー関数へのコールアウトが行われると、渡されるパラメーターは以下のようになります。

  • 登録されたprochr構造体へのポインタ
  • コールアウトの理由を示すコールアウトリクエスト値
  • スレッドまたはプロセスID

戻り値

正常に終了すると、proch_regカーネルサービスは値0を返す。 唯一のエラー (ゼロ以外の) 戻りコードは、NULL ポインターを使用して登録しようとすることです。

実行環境

proch_regカーネルサービスは、プロセス環境からのみ呼び出すことができる。