prctl

Autres langues

Langue: ja

Version: 2006-08-30 (mandriva - 01/05/08)

Autres sections - même nom

Section: 2 (Appels système)

名前

prctl - プロセスの操作を行なう

書式

 #include <sys/prctl.h>
 
 int prctl(int option, unsigned long arg2, unsigned long arg3,
           unsigned long arg4, unsigned long arg5);
 

説明

prctl() の動作は最初の引き数によって決定される (この値は <linux/prctl.h> に定義されている)。 残りのパラメータは最初の引き数によって変化する。 一番目の引き数として以下のものを指定できる:
PR_SET_PDEATHSIG
(Linux 2.1.57 以降) 親プロセス死亡シグナル (parent process death signal) を arg2 に設定する (設定できるシグナル値の範囲は 1..maxsig であり、0 は通知の解除である)。 呼び出し元プロセスの親プロセスが死んだ際に、ここで設定した値が シグナルとして通知される。この値は fork(2) 時に解除される。
PR_GET_PDEATHSIG
(Linux 2.3.15 以降) 親プロセス死亡シグナルの現在の値を読み取り (int *) arg2 に格納する。
PR_SET_DUMPABLE
(Linux 2.3.20 以降) デフォルトの振る舞いではコアダンプを引き起こすようなシグナルを受信したときに、 コアダンプするかどうかを決定するフラグを設定する (通常このフラグは、デフォルトではセットされているが、 set-user-ID あるいは set-group-ID プログラムが実行されたり、 さまざまなシステムコールによってプロセスの UID や GID が操作されたときに クリアされる)。 2.6.12 以前のカーネルでは、 arg2 は 0 (プロセスはダンプ不可) あるいは 1 (プロセスはダンプ可能) の どちらかでなければならない。 2.6.13 から 2.6.17 までのカーネルでは、値 2 も認められていた。 この値を指定すると、通常はダンプされないバイナリが root だけが 読み込み可能な形でダンプされた。 セキュリティ上の理由から、この機能は削除された (proc(5) の /proc/sys/fs/suid_dumpable の説明も参照)。
PR_GET_DUMPABLE
(Linux 2.3.20 以降) 呼び出し元プロセスにおけるダンプ可能フラグの 現在の状態を (関数の返り値として) 返す。
PR_SET_KEEPCAPS
(Linux 2.2.18 以降) プロセスの「資格保持」フラグを設定する。 このフラグは、プロセスの実 UID、実効 UID、保存 set-user-ID のうち少なくとも 一つが 0 であった状態から、これら全てが 0 以外に変更されたとき、 プロセスの実効・許可資格集合がクリアされるかどうかを決定する。 (デフォルトでは、これらの資格集合はクリアされる。) arg2 は 0 (資格をクリアする) あるいは 1 (資格を保持する) の どちらかでなければならない。
PR_GET_KEEPCAPS
(Linux 2.2.18 以降) 呼び出し元プロセスにおける「資格保持」フラグの 現在の状態を (関数の返り値として) 返す。
PR_SET_TIMING
(Linux 2.6.0-test4 以降) (通常の、伝統的に使われてきた) 統計的なプロセスタイミングを使用するか、 正確なタイムスタンプに基づくプロセスタイミングを使用するかを設定する。 arg2 に指定できる値は PR_TIMING_STATISTICALPR_TIMING_TIMESTAMP である。
PR_GET_TIMING
(Linux 2.6.0-test4 以降) 現在使用中のプロセスタイミングを決める方法を返す。
PR_SET_NAME
(Linux 2.6.9 以降) 呼び出し元プロセスのプロセス名を arg2 で指定されたものに設定する。
PR_GET_NAME
(Linux 2.6.11 以降) 呼び出し元プロセスのプロセス名を arg2 に格納する。
PR_GET_ENDIAN
(Linux 2.6.18 以降、PowerPC のみ) 呼び出し元プロセスのエンディアン設定 (endian-ness) を返す。
PR_SET_ENDIAN
(Linux 2.6.18 以降、PowerPC のみ) 呼び出し元プロセスのエンディアン設定 (endian-ness) を arg2 で指定された値に設定する。 指定できる値は PR_ENDIAN_BIG, PR_ENDIAN_LITTLE, PR_ENDIAN_PPC_LITTLE (PowerPC 擬似リトルエンディアン) のいずれか一つである。
PR_SET_UNALIGN
(Linux 2.3.48 以降, parisc と ia64 のみ) unaligned アクセス制御ビットを arg2 で指定された値に設定する。 指定できる値は PR_UNALIGN_NOPRINT (unaligned なユーザアクセスを黙って 修正する) か PR_UNALIGN_SIGBUS (unaligned なユーザアクセスがあった場合 SIGBUS を生成する) である。
PR_GET_UNALIGN
(Linux 2.3.48 以降, parisc と ia64 のみ) unaligned アクセス制御ビットの値を arg2 に入れて返す。
PR_SET_FPEMU
(Linux 2.4.18 および 2.5.9 以降、ia64 のみ) 浮動小数点エミュレーション (floating-point emulation) 制御ビットを arg2 で指定された値に設定する。 指定できる値は PR_FPEMU_NOPRINT (浮動小数点命令アクセスを黙って エミュレートする) か PR_FPEMU_SIGFPE (浮動小数点命令をエミュレートせず、 代わりに SIGFPE を送る) である。
PR_GET_FPEMU
(Linux 2.4.18 および 2.5.9 以降、ia64 のみ) 浮動小数点エミュレーション制御ビットの値を arg2 に入れて返す。
PR_SET_FPEXC
(Linux 2.4.21 および 2.5.32 以降、PowerPC のみ) 浮動小数点例外モード (floating-point exception mode) を arg2 で指定された値に設定する。 指定できるのは以下の値である: PR_FP_EXC_SW_ENABLE (FPEXC で浮動小数点例外を有効にする)、 PR_FP_EXC_DIV (0 除算)、 PR_FP_EXC_OVF (オーバーフロー)、 PR_FP_EXC_UND (アンダーフロー)、 PR_FP_EXC_RES (不正確な結果 (inexact result))、 PR_FP_EXC_INV (不正な命令 (invalid operation))、 PR_FP_EXC_DISABLED (浮動小数点例外を無効にする)、 PR_FP_EXC_NONRECOV (async non-recoverable exception mode)、 PR_FP_EXC_ASYNC (async recoverable exception mode)、 PR_FP_EXC_PRECISE (precise exception mode)。
PR_GET_FPEXC
(Linux 2.4.21 および 2.5.32 以降、PowerPC のみ) 浮動小数点例外モードの値を arg2 に入れて返す。

返り値

optionPR_GET_DUMPABLE または PR_GET_KEEPCAPS の場合は成功時に 0 または 1 を返す。 option がその他の場合は成功時に 0 を返す。 エラーの場合は -1 が返され、 errno に適切な値が設定される。

エラー

EINVAL
option の値が理解できない。または optionPR_SET_PDEATHSIGarg2 が 0 でもシグナル番号でもない。

バージョン

prctl() システムコールは Linux 2.1.57 で導入された。

準拠

このコールは Linux 特有である。 IRIX には prctl() システム・コールがあるが (MIPS アーキテクチャにおいて irix_prctl として Linux 2.1.44 で同様に導入された)、 そのプロトタイプは

ptrdiff_t prctl(int option, int arg2, int arg3);

である。ユーザー当りのプロセス最大数を取得するオプション、 プロセスの使用できる最大プロッサー数を取得するオプション、 現在特定のプロセスが停止(block)させられているかどうか調べるオプション、 スタックサイズの最大値の取得や設定を行なうオプションなどがある。

関連項目

signal(2), core(5)