Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
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_CAPBSET_READ (Linux 2.6.25 以降) で指定されたケーパビリティが呼び出したスレッドのケーパビリティ バインディングセット (capability bounding set) に含まれている場合、 (関数の返り値として) 1 を返し、そう でない場合 0 を返す (ケーパビリティ定数は <linux/capability.h> で定義されている)。 ケーパビリティバウンディングセットは、 execve(2) を呼び出した際に、ファイルの許可 (permitted) ケーパビリティの中で そのプロセスが獲得できるケーパビリティを指示するも のである。 arg2 に指定されたケーパビリティが有効でない場合、 呼び出しはエラー EINVAL で失敗す る。 PR_CAPBSET_DROP (Linux 2.6.25 以降) 呼び出したスレッドがケーパビリティ CAP_SETPCAP を持っている場合、 呼び出したスレッ ドのケーパビリティバウンディングセットから arg2 で指定されたケーパビリティを外す。 呼び出したスレッドの子プロセスは変更後のバウンディングセットを 継承する。 呼び出したスレッドが CAP_SETPCAP を持っていない場合、呼び出しはエラー EPERM で失敗 する。 arg2 に指定されたケーパビリティが有効でない場合、 EINVAL で失敗する。 ファイ ルケーパビリティがカーネルで有効になっていない場合 (この場合にはバウンディングセッ トがサポートされない)、 EINVAL で失敗する。 PR_SET_DUMPABLE (Linux 2.3.20 以降) (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 の説明も参 照)。 ダンプ不可のプロセスを ptrace(2) PTRACE_ATTACH 経由で接続すること はできな い。 PR_GET_DUMPABLE (Linux 2.3.20 以降) (Linux 2.3.20 以降) 呼び出し元プロセスにおけるダンプ可能フラグの 現在の状態を (関 数の返り値として) 返す。 PR_SET_ENDIAN (Linux 2.6.18 以降、PowerPC のみ) 呼び出し元プロセスのエンディアン設定 (endian-ness) を arg2 で指定された値に設定す る。 指定できる値は PR_ENDIAN_BIG, PR_ENDIAN_LITTLE, PR_ENDIAN_PPC_LITTLE (PowerPC 擬似リトルエンディアン) のいずれか一つである。 PR_GET_ENDIAN (Linux 2.6.18 以降、PowerPC のみ) 呼び出し元プロセスのエンディアン設定 (endian-ness) を (int *) 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 のみ) 浮動小数点エミュレーション制御ビットの値を (int *) 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 nonrecoverable 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 のみ) 浮動小数点例外モードの値を (int *) arg2 が指す場所に格納して返す。 PR_SET_KEEPCAPS (Linux 2.2.18 以降) スレッドの「ケーパビリティ保持」フラグを設定する。 このフラグは、スレッドの実 UID、実効 UID、保存 set-user-ID のうち少なく とも一つが 0 であった状態から、これら 全てが 0 以外に変更されたとき、 スレッドの許可ケーパビリティ集合がクリアされるかど うかを決定する。 デフォルトでは、このような変更が行われた場合、許可ケーパビリティ セット はクリアされる。「ケーパビリティ保持」フラグを設定すると、 許可ケーパビリ ティセットはクリアされなくなる。 arg2 は 0 (許可ケーパビリティをクリアする) か 1 (許可ケーパビリティ を保持する) の どちらかでなければならない。 (このような ID の変 更が行われた場合、「ケーパビリティ保持」フラグの設定 に関わらず、スレッドの実効ケー パビリティセットは常にクリアされる。) execve(2) が呼び出されると、「ケーパビリティ 保持」フラグは 0 にリセットされる。 PR_GET_KEEPCAPS (Linux 2.2.18 以降) 呼び出し元スレッドにおける「ケーパビリティ保持」フラグの 現在の状態を (関数の返り値 として) 返す。 PR_SET_NAME (Linux 2.6.9 以降) 呼び出し元プロセスのプロセス名を (char *) arg2 が指す場所に格納された値を使って設定 する。 名前は最大で 16 バイトであり、 それより少ないバイト数の場合は NULL で終端す べきである。 PR_GET_NAME (Linux 2.6.11 以降) 呼び出し元プロセスのプロセス名を (char *) arg2 が指す場所に格納して返す。 バッファ は最大で 16 バイトを格納できるようにすべきである。 返される文字列は、長さが 16 バイ トより短い場合は NULL 終端される。 PR_SET_PDEATHSIG (Linux 2.1.57 以降) 親プロセス死亡シグナル (parent process death signal) を arg2 に設定 する (設定でき るシグナル値の範囲は 1..maxsig であり、0 は通知の解除であ る)。 呼び出し元プロセス の親プロセスが死んだ際に、ここで設定した値が シ グナルとして通知される。この値は fork(2) の子プロセスでは解除される。 (Linux 2.5.36 以降および 2.6.23 以降では) set-user-ID もしくは set-group-ID されたバイナリを実行した場合にも、このフラグは解 除される。 PR_GET_PDEATHSIG (Linux 2.3.15 以降) 親プロセス死亡シグナルの現在の値を (int *) arg2 が指す場所に格納して返す。 PR_SET_SECCOMP (Linux 2.6.23 以降) 呼び出したスレッドの secure computing モードを設定する。 現在の実装では、 arg2 は 1 にしなければならない。 secure computing モードを 1 に設定すると、 そのスレッドが呼 び出しを許可されるシステムコールは read(2), write(2), _exit(2), sigreturn(2) だけ になる。 それ以外のシステムコールを呼び出すと、シグナル SIGKILL が配送される。 パイ プやソケットから読み込んだ、信頼できないバイトコードを実行する 必要がある大量の演算 を行うアプリケーションにおいて、 secure computing モードは役立つ。 この操作は利用で きるのは、カーネルが CONFIG_SECCOMP を有効にして 作成されている場合だけである。 PR_GET_SECCOMP (Linux 2.6.23 以降) 呼び出したスレッドの secure computing モードを返す。 現在の実装 (モードは 1 固定) はあまり役に立たないが、 将来他のモードが実装されると役立つようになるかもしれない。 呼び出したスレッドが secure computing モードでなかった場合、 この操作は 0 を返す。 呼び出したスレッドが secure computing モードの場合、 prctl() を呼び出すとシグナル SIGKILL がそのプロセスに送信される。 この操作が利用できるのは、カーネルが CONFIG_SECCOMP を有効にして 作成されている場合だけである。 PR_SET_SECUREBITS (Linux 2.6.26 以降) 呼び出したスレッドの "securebits" フラグを arg2 で渡された値に設定する。 capabilities(7) 参照。 PR_GET_SECUREBITS (Linux 2.6.26 以降) 呼び出したスレッドの "securebits" フラグを (関数の返り値として) 返す。 capabilities(7) 参照。 PR_SET_TIMING (Linux 2.6.0-test4 以降) (通常の、伝統的に使われてきた) 統計的なプロセスタイミングを使用するか、 正確なタイ ムスタンプに基づくプロセスタイミングを使用するかを設定する。 arg2 に指定できる値は PR_TIMING_STATISTICAL か PR_TIMING_TIMESTAMP である。 PR_TIMING_TIMESTAMP は現在の ところ実 装されていない (このモードに設定しようとするとエラー EINVAL が起こる こと だろう)。 PR_GET_TIMING (Linux 2.6.0-test4 以降) 現在使用中のプロセスタイミングを決める方法を返す。 PR_TASK_PERF_EVENTS_DISABLE (Linux 2.6.31 以降) Disable all performance counters attached to the calling process, regardless of whether the counters were created by this process or another process. Performance counters created by the calling process for other processes are unaffected. For more information on performance counters, see the kernel source file tools/perf/design.txt. Originally called PR_TASK_PERF_COUNTERS_DISABLE; renamed (with same numerical value) in Linux 2.6.32. PR_TASK_PERF_EVENTS_ENABLE (Linux 2.6.31 以降) The converse of PR_TASK_PERF_EVENTS_DISABLE; enable performance counters attached to the calling process. Originally called PR_TASK_PERF_COUNTERS_ENABLE; renamed in Linux 2.6.32. PR_SET_TSC (Linux 2.6.26 以降, x86 のみ) そのプロセスがタイムスタンプ・カウンタを読み出せるかを決定する フラグの状態を設定す る。 読み出しを許可する場合は arg2 に PR_TSC_ENABLE を、そのプロセスがタイムスタン プ・カウンタを読み出そうとした際に SIGSEGV を発生させる場合には PR_TSC_SIGSEGV を渡 す。 PR_GET_TSC (Linux 2.6.26 以降, x86 のみ) そのプロセスがタイムスタンプ・カウンタを読み出せるかを決定する フラグの状態を (int *) arg2 が指す場所に格納して返す。 PR_SET_UNALIGN (ia64 では Linux 2.3.48 以降; parisc では Linux 2.6.15 以降; PowerPC では Linux 2.6.18 以降; Alpha では Linux 2.6.22 以降; これらのアーキテクチャのみ) unaligned アクセス制御ビットを arg2 で指定された値に設定する。 指定できる値は PR_UNALIGN_NOPRINT (unaligned なユーザアクセスを黙って 修正する) か PR_UNALIGN_SIGBUS (unaligned なユーザアクセスがあった場合 SIGBUS を生成する) であ る。 PR_GET_UNALIGN (バージョンとアーキテクチャの情報は PR_SET_UNALIGN 参照) unaligned アクセス制御 ビットの値を (int *) arg2 が指す場所に格納して返す。 PR_MCE_KILL (Linux 2.6.32 以降) Set the machine check memory corruption kill policy for the current thread. If arg2 is PR_MCE_KILL_CLEAR, clear the thread memory corruption kill policy and use the system-wide default. (The system-wide default is defined by /proc/sys/vm/memory_failure_early_kill; see proc(5).) If arg2 is PR_MCE_KILL_SET, use a thread-specific memory corruption kill policy. In this case, arg3 defines whether the policy is early kill (PR_MCE_KILL_EARLY), late kill (PR_MCE_KILL_LATE), or the system-wide default (PR_MCE_KILL_DEFAULT). Early kill means that the thread receives a SIGBUS signal as soon as hardware memory corruption is detected inside its address space. In late kill mode, the process is only killed when it accesses a corrupted page. See sigaction(2) for more information on the SIGBUS signal. The policy is inherited by children. The remaining unused prctl() arguments must be zero for future compatibility. PR_MCE_KILL_GET (Linux 2.6.32 以降) Return the current per-process machine check kill policy. All unused prctl() arguments must be zero. PR_SET_MM (Linux 3.3 以降) Modify certain kernel memory map descriptor fields of the calling process. Usually these fields are set by the kernel and dynamic loader (see ld.so(8) for more information) and a regular application should not use this feature. However, there are cases, such as self-modifying programs, where a program might find it useful to change its own memory map. This feature is available only if the kernel is built with the CONFIG_CHECKPOINT_RESTORE option enabled. The calling process must have the CAP_SYS_RESOURCE capability. The value in arg2 is one of the options below, while arg3 provides a new value for the option. PR_SET_MM_START_CODE Set the address above which the program text can run. The corresponding memory area must be readable and executable, but not writable or sharable (see mprotect(2) and mmap(2) for more information). PR_SET_MM_END_CODE Set the address below which the program text can run. The corresponding memory area must be readable and executable, but not writable or sharable. PR_SET_MM_START_DATA Set the address above which initialized and uninitialized (bss) data are placed. The corresponding memory area must be readable and writable, but not executable or sharable. PR_SET_MM_END_DATA Set the address below which initialized and uninitialized (bss) data are placed. The corresponding memory area must be readable and writable, but not executable or sharable. PR_SET_MM_START_STACK Set the start address of the stack. The corresponding memory area must be readable and writable. PR_SET_MM_START_BRK Set the address above which the program heap can be expanded with brk(2) call. The address must be greater than the ending address of the current program data segment. In addition, the combined size of the resulting heap and the size of the data segment can't exceed the RLIMIT_DATA resource limit (see setrlimit(2)). PR_SET_MM_BRK Set the current brk(2) value. The requirements for the address are the same as for the PR_SET_MM_START_BRK option.
返り値
成功すると、 PR_GET_DUMPABLE, PR_GET_KEEPCAPS, PR_CAPBSET_READ, PR_GET_TIMING, PR_GET_SECUREBITS, PR_MCE_KILL_GET, PR_GET_SECCOMP は上述の負でない値を返す (なお、 PR_GET_SECCOMP は返らない場合もある)。 option が他の値の場合は 成功時に 0 を返す。 エラー の場合、-1 を返し、 errno に適切な値を設定する。
エラー
EFAULT arg2 が不正なアドレスである。 EINVAL option の値が理解できない。 EINVAL option is PR_MCE_KILL or PR_MCE_KILL_GET or PR_SET_MM, and unused prctl() arguments were not specified as zero. EINVAL arg2 が指定された option で有効な値ではない。 EINVAL option が PR_SET_SECCOMP か PR_GET_SECCOMP だが、カーネルが CONFIG_SECCOMP を有効に して作成されていなかった。 EINVAL option is PR_SET_MM, and one of the following is true * arg4 or arg5 is nonzero; * arg3 is greater than TASK_SIZE (the limit on the size of the user address space for this architecture); * arg2 is PR_SET_MM_START_CODE, PR_SET_MM_END_CODE, PR_SET_MM_START_DATA, PR_SET_MM_END_DATA, or PR_SET_MM_START_STACK, and the permissions of the corresponding memory area are not as required; * arg2 is PR_SET_MM_START_BRK or PR_SET_MM_BRK, and arg3 is less than or equal to the end of the data segment or specifies a value that would cause the RLIMIT_DATA resource limit to be exceeded. EPERM option が PR_SET_SECUREBITS で、呼び出し元がケーパビリティ CAP_SETPCAP を持っていな い。 または、"locked" フラグを解除しようとした。 または、locked フラグがセットされ ているフラグをセットしようとした (capabilities(7) 参照)。 EPERM option が PR_SET_KEEPCAPS で、呼び出し元のフラグ SECURE_KEEP_CAPS_LOCKED がセットさ れている (capabilities(7) 参照)。 EPERM option が PR_CAPBSET_DROP で、呼び出し元がケーパビリティ CAP_SETPCAP を持っていな い。 EPERM option が PR_SET_MM で、呼び出し元がケーパビリティ CAP_SYS_RESOURCE を持っていな い。
バージョン
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)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.40 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。