Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all bug

名前

       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_CHILD_SUBREAPER (Linux 3.4 以降)
              If arg2 is nonzero, set the "child subreaper" attribute of the calling process;  if
              arg2  is zero, unset the attribute.  When a process is marked as a child subreaper,
              all of the children that it creates, and  their  descendants,  will  be  marked  as
              having  a  subreaper.  In effect, a subreaper fulfills the role of init(1)  for its
              descendant processes.  Upon termination of a process that is  orphaned  (i.e.,  its
              immediate  parent  has  already  terminated)  and marked as having a subreaper, the
              nearest still living ancestor subreaper will receive a SIGCHLD signal and  be  able
              to wait(2)  on the process to discover its termination status.

       PR_GET_CHILD_SUBREAPER (Linux 3.4 以降)
              Return  the  "child subreaper" setting of the caller, in the location pointed to by
              (int *) arg2.

       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 バイトであり、  それより少ないバイト数の場合はヌルで終端すべ
              きである。 これは、 pthread_setname_np(3) で設定でき、 pthread_getname_np(3) で取得
              できるのと同じ属性である。 同様に、 tid が呼び出し元スレッドの ID の場合、 この属性
              は /proc/self/task/[tid]/comm 経由でもアクセス可能である。

       PR_GET_NAME (Linux 2.6.11 以降)
              呼び出し元スレッドの名前を  (char *) arg2 が指す場所に格納して返す。 バッファは最大
              で 16 バイトを格納できるようにすべきである。 返される文字列は、長さが 16 バイトより
              短い場合はヌル終端される。

       PR_SET_NO_NEW_PRIVS (Linux 3.5 以降)
              Set the calling process's no_new_privs bit to the value in arg2.  With no_new_privs
              set to 1, execve(2)  promises not to grant privileges to do anything that could not
              have  been done without the execve(2)  call (for example, rendering the set-user-ID
              and set-group-ID permission bits, and file capabilities non-functional).  Once set,
              this bit cannot be unset.  The setting of this bit is inherited by children created
              by fork(2)  and clone(2), and preserved across execve(2).

              詳しい情報は、カーネルソースファイル Documentation/prctl/no_new_privs.txt を参照。

       PR_GET_NO_NEW_PRIVS (Linux 3.5 以降)
              Return (as the function result) the value of the no_new_privs bit for  the  current
              process.   A  value  of  0  indicates the regular execve(2) behavior.  A value of 1
              indicates execve(2)  will  operate  in  the  privilege-restricting  mode  described
              above.

       PR_SET_PDEATHSIG (Linux 2.1.57 以降)
              親プロセス死亡シグナル (parent process death signal) を arg2 に設定する (設定できる
              シグナル値の範囲は 1..maxsig であり、0 は通知の解除である)。 呼び出し元プロセスの親
              プロセスが死んだ際に、ここで設定した値が シグナルとして通知される。この値は fork(2)
              の子プロセスでは解除される。 (Linux 2.4.36 以降および 2.6.23 以降では)  set-user-ID
              もしくは  set-group-ID されたバイナリを実行した場合にも、このフラグは解除される。こ
              の値は execve(2) の前後で保持される。

       PR_GET_PDEATHSIG (Linux 2.3.15 以降)
              親プロセス死亡シグナルの現在の値を (int *) arg2 が指す場所に格納して返す。

       PR_SET_PTRACER (Linux 3.4 以降)
              This is meaningful only when the Yama LSM is enabled and  in  mode  1  ("restricted
              ptrace",  visible via /proc/sys/kernel/yama/ptrace_scope).  When a "ptracer process
              ID" is passed in arg2, the  caller  is  declaring  that  the  ptracer  process  can
              ptrace(2)   the  calling  process  as  if  it were a direct process ancestor.  Each
              PR_SET_PTRACER operation replaces the previous  "ptracer  process  ID".   Employing
              PR_SET_PTRACER  with  arg2  set  to 0 clears the caller's "ptracer process ID".  If
              arg2  is  PR_SET_PTRACER_ANY,  the  ptrace  restrictions  introduced  by  Yama  are
              effectively disabled for the calling process.

              詳しい情報は、カーネルソースファイル Documentation/security/Yama.txt を参照。

       PR_SET_SECCOMP (Linux 2.6.23 以降)
              呼び出したスレッドのセキュアコンピューティング (seccomp) モードを設定する。 seccomp
              モードは利用できるシステムコールを制限するものである。 seccomp モードは arg2 で指定
              できる (seccomp 定数は <linux/seccomp.h> で定義されている)。

              arg2SECCOMP_MODE_STRICT に設定すると、 そのスレッドが呼び出しを許可されるシステ
              ムコールは read(2), write(2), _exit(2), sigreturn(2) だけになる。  それ以外のシステ
              ムコールを呼び出すと、シグナル  SIGKILL が配送される。 パイプやソケットから読み込ん
              だ、 信頼できないバイトコードを実行する必要がある大量の演算を行うアプリケーションに
              おいて、 strict secure computing モードは役立つ。 この操作は利用できるのは、 カーネ
              ルが CONFIG_SECCOMP を有効にして作成されている場合だけである。

              arg2SECCOMP_MODE_FILTER (Linux 3.5 以降) に設定すると、  許可されるシステムコー
              ルは arg3 で渡された Berkeley Packet Filter へのポインターで定義される。 この引き数
              は struct  sock_fprog  へのポインターである。  これは任意のシステムコールやシステム
              コール引き数をフィルタリングするために設計された。           このモードはカーネルで
              CONFIG_SECCOMP_FILTER が有効になっている場合にのみ利用可能である。

              SECCOMP_MODE_FILTER フィルターで fork(2)  が許可されている場合、  seccomp  モードは
              fork(2)   で作成された子プロセスに継承される。   execve(2)   が許可されている場合、
              seccomp モードは execve(2) の前後で維持される。 フィルターで prctl() コールが許可さ
              れている場合、  追加でフィルターが定義され、 これらのフィルターは許可されないものが
              見つかるまで指定された順序で実行される。

              詳しい情報は、カーネルソースファイル  Documentation/prctl/seccomp_filter.txt   を参
              照。

       PR_GET_SECCOMP (Linux 2.6.23 以降)
              呼び出したスレッドの secure computing モードを (関数の結果として) 返す。 呼び出した
              スレッドが secure computing モードでなかった場合、 この操作は 0 を返す。 呼び出した
              スレッドが  secure computing モードの場合、 prctl() を呼び出すとシグナル SIGKILL が
              そのプロセスに送信される。 呼び出したスレッドがフィルタモードで、  このシステムコー
              ルが  seccomp  フィルタにより許可されている場合、 2 を返す。 この操作が利用できるの
              は、カーネルが 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_THP_DISABLE (Linux 3.15 以降)
              呼び出したスレッドの "THP disable" (THP 無効) フラグの状態を設定する。 arg2 が 0 以
              外の場合、フラグは有効になり、そうでない場合はクリーンされる。 このフラグを設定する
              方法により、 コードを変更できなかったり madvise(2) の malloc hook  をが有効ではない
              ジョブ (この方法は静的に割り当てられたデータには有効ではない)に対して、 transparent
              huge pages を無効にする手段が提供される。 "THP disable" フラグの設定は fork(2) で作
              成された子プロセスに継承され、 execve の前後で維持される。

       PR_GET_THP_DISABLE (Linux 3.15 以降)
              呼び出し元スレッドの "THP disable" フラグの現在の設定を (関数の結果として) 返す。フ
              ラグがセットされている場合は 1 が、セットされていない場合は 0 が返る。

       PR_GET_TID_ADDRESS (Linux 3.5 以降)
              set_tid_address(2)    や    clone(2)    CLONE_CHILD_CLEARTID     フラグで設定された
              clear_child_tid  を取得し、 (int **) arg2 が指す場所に格納して返す。 この機能はカー
              ネルが CONFIG_CHECKPOINT_RESTORE オプションを有効にして作成されている場合にのみ利用
              できる。

       PR_SET_TIMERSLACK (Linux 2.6.28 以降)
              Set the current timer slack for the calling thread to the nanosecond value supplied
              in arg2.  If arg2 is less than or equal to zero, reset the current timer  slack  to
              the  thread's  default timer slack value.  The timer slack is used by the kernel to
              group timer expirations for the calling thread that are close to one another; as  a
              consequence,  timer expirations for the thread may be up to the specified number of
              nanoseconds late (but will never expire early).   Grouping  timer  expirations  can
              help reduce system power consumption by minimizing CPU wake-ups.

              The  timer  expirations  affected  by  timer  slack  are  those  set  by select(2),
              pselect(2), poll(2), ppoll(2), epoll_wait(2),  epoll_pwait(2),  clock_nanosleep(2),
              nanosleep(2),  and  futex(2)   (and  thus  the  library  functions  implemented via
              futexes,    including    pthread_cond_timedwait(3),     pthread_mutex_timedlock(3),
              pthread_rwlock_timedrdlock(3),          pthread_rwlock_timedwrlock(3),          and
              sem_timedwait(3)).

              Timer slack is not  applied  to  threads  that  are  scheduled  under  a  real-time
              scheduling policy (see sched_setscheduler(2)).

              Each  thread  has  two  associated  timer  slack  values:  a "default" value, and a
              "current" value.  The current value is the  one  that  governs  grouping  of  timer
              expirations.  When a new thread is created, the two timer slack values are made the
              same as the current value of the creating thread.  Thereafter, a thread can  adjust
              its  current  timer  slack  value via PR_SET_TIMERSLACK (the default value can't be
              changed).  The timer slack values of init (PID 1), the ancestor of  all  processes,
              are  50,000  nanoseconds  (50  microseconds).  The timer slack values are preserved
              across execve(2).

       PR_GET_TIMERSLACK (Linux 2.6.28 以降)
              呼び出し元スレッドの現在のタイマーのスラック値を (関数の結果として) 返す。

       PR_SET_TIMING (Linux 2.6.0-test4 以降)
              (通常の、伝統的に使われてきた) 統計的なプロセスタイミングを使用するか、  正確なタイ
              ムスタンプに基づくプロセスタイミングを使用するかを設定する。  arg2 に指定できる値は
              PR_TIMING_STATISTICALPR_TIMING_TIMESTAMP である。 PR_TIMING_TIMESTAMP  は現在の
              ところ実装されていない  (このモードに設定しようとするとエラー EINVAL が起こることだ
              ろう)。

       PR_GET_TIMING (Linux 2.6.0-test4 以降)
              現在使用中のプロセスタイミングを決める方法を (関数の結果として) 返す。

       PR_TASK_PERF_EVENTS_DISABLE (Linux 2.6.31 以降)
              呼び出したプロセスに接続されたすべての性能カウンターを無効にする。 カウンターがこの
              プロセスにより作成されたか他のプロセスにより作成されたかは関係ない。 呼び出したプロ
              セスが他のプロセス用に作成した性能カウンターは影響を受けない。 性能カウンターの詳細
              については Linux カーネルソースの tools/perf/design.txt を参照。

              以前は PR_TASK_PERF_COUNTERS_DISABLE と呼ばれていた。 Linux 2.6.32 で名前が変更され
              た (数値は同じままである)。

       PR_TASK_PERF_EVENTS_ENABLE (Linux 2.6.31 以降)
              PR_TASK_PERF_EVENTS_DISABLE の逆。 呼び出したプロセスに接続された性能カウンターを有
              効にする。

              以前は  PR_TASK_PERF_COUNTERS_ENABLE と呼ばれていた。 Linux 2.6.32 で名前が変更され
              た。

       PR_SET_TSC (Linux 2.6.26 以降, x86 のみ)
              そのプロセスがタイムスタンプ・カウンタを読み出せるかを決定する フラグの状態を設定す
              る。  読み出しを許可する場合は arg2PR_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 killed only 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 以降)
              呼び出したプロセスのカーネルメモリマップディスクリプタのフィールドを変更する。 これ
              らのフィールドは通常カーネルと動的リンカーにより設定される (詳しい情報は ld.so を参
              照)。 通常のアプリケーションはこの機能を利用すべきではない。 しかしながら、自分を書
              き換えるプログラムなど、 プログラムが自分自身のメモリマップを変更するのが有用な場面
              もある。 この機能はカーネルが CONFIG_CHECKPOINT_RESTORE  オプションを有効にして作成
              されている場合にのみ利用できる。  呼び出したプロセスは  CAP_SYS_RESOURCE ケーパビリ
              ティを持っていなければならない。 arg2 の値には以下のいずれかを指定し、 arg3  でその
              オプションの新しい値を指定する。

              PR_SET_MM_START_CODE
                     プログラムテキストを実行できるアドレスの上限を設定する。  対応するメモリ領域
                     は読み出し可能で実行可能でなければならないが、  書き込み可能だったり共有可能
                     だったりしてはならない (詳しい情報は mprotect(2) と mmap(2) 参照)。

              PR_SET_MM_END_CODE
                     プログラムテキストを実行できるアドレスの下限を設定する。  対応するメモリ領域
                     は読み出し可能で実行可能でなければならないが、  書き込み可能だったり共有可能
                     だったりしてはならない。

              PR_SET_MM_START_DATA
                     初期化済データや未初期化   (bss)  データを配置する領域のアドレス上限を指定す
                     る。 対応するメモリ領域は読み書き可能でなければならないが、 実行可能だったり
                     共有可能だったりしてはならない。

              PR_SET_MM_END_DATA
                     初期化済データや未初期化   (bss)  データを配置する領域のアドレス下限を指定す
                     る。 対応するメモリ領域は読み書き可能でなければならないが、 実行可能だったり
                     共有可能だったりしてはならない。

              PR_SET_MM_START_STACK
                     スタックの開始アドレスを設定する。  対応するメモリ領域は読み書き可能でなけれ
                     ばならない。

              PR_SET_MM_START_BRK
                     brk(2) コールで拡張できるプログラムのヒープ領域のアドレス上限を設定する。 こ
                     のアドレスは、プログラムの現在のデータセグメントの最終アドレスより大きくなけ
                     ればならない。 また、 変更後のヒープとデータセグメントのサイズを合わせたサイ
                     ズが  RLIMIT_DATA  リソースリミットを超えることはできない  (setrlimit(2)  参
                     照)。

              PR_SET_MM_BRK
                     現在の brk(2) 値を設定する。 このアドレスの要件は  PR_SET_MM_START_BRK  オプ
                     ションと同じである。

              以下のオプションは Linux 3.5 以降で利用できる。

              PR_SET_MM_ARG_START
                     プログラムのコマンドラインを配置するアドレスの上限を設定する。

              PR_SET_MM_ARG_END
                     プログラムのコマンドラインを配置するアドレスの下限を設定する。

              PR_SET_MM_ENV_START
                     プログラムの環境情報 (environment) を配置するアドレスの上限を設定する。

              PR_SET_MM_ENV_END
                     プログラムの環境情報 (environment) を配置するアドレスの下限を設定する。

                     PR_SET_MM_ARG_START,         PR_SET_MM_ARG_END,         PR_SET_MM_ENV_START,
                     PR_SET_MM_ENV_END で指定されるアドレスはプロセスのスタック領域に属している必
                     要がある。  したがって、これらのメモリ領域は読み書き可能でなければならない。
                     また、 (カーネル設定によっては) MAP_GROWSDOWN 属性がセットされていなければな
                     らない (mmap(2) 参照)。

              PR_SET_MM_AUXV
                     新しい補助ベクトル (auxiliary vector) を設定する。 arg3 引き数はベクトルのア
                     ドレスを指定し、 arg4 はベクトルのサイズを指定する。

              PR_SET_MM_EXE_FILE
                     /proc/pid/exe シンボリックリンクを arg3 引き数で渡された新しい実行可能なファ
                     イルディスクリプタを指すシンボリックリンクで置き換える。  ファイルディスクリ
                     プタは通常の open(2) コールで取得すべきである。

                     シンボリックリンクを変更するには、  既存の実行可能なメモリ領域のすべてをアン
                     マップする必要がある。これにはカーネル自身が作成した領域も含まれる     (例え
                     ば、カーネルは通常 ELF .text  セクションに少なくとも一つの実行可能なメモリ領
                     域を作成する)。

                     二つ目の制限は、このような変更はプロセスの生存期間で一度だけ行うことができる
                     という点である。 一度変更を行った後で変更を行おうとすると拒否される。 この動
                     作は、  システム管理者が、 システムで動作するすべてのプロセスが行う、 普通で
                     ないシンボリックリンクの変更を監視するのを楽にする。

返り値

       成功すると、 PR_GET_DUMPABLE,  PR_GET_KEEPCAPS,  PR_GET_NO_NEW_PRIVS,  PR_GET_THP_DISABLE,
       PR_CAPBSET_READ,  PR_GET_TIMING,  PR_GET_TIMERSLACK,  PR_GET_SECUREBITS,  PR_MCE_KILL_GET,
       PR_GET_SECCOMP  は上述の負でない値を返す   (なお、PR_GET_SECCOMP   は返らない場合もある)。
       option  が他の値の場合は成功時に 0 を返す。 エラーの場合、-1 を返し、 errno に適切な値を設
       定する。

エラー

       EFAULT arg2 が不正なアドレスである。

       EINVAL option の値が理解できない。

       EINVAL optionPR_MCE_KILL,  PR_MCE_KILL_GET,   PR_SET_MM   のいずれかで、かつ未使用の
              prctl() 引き数に 0 が指定されていなかった。

       EINVAL arg2 が指定された option で有効な値ではない。

       EINVAL optionPR_SET_SECCOMPPR_GET_SECCOMP だが、カーネルが CONFIG_SECCOMP を有効に
              して作成されていなかった。

       EINVAL optionPR_SET_MM で、以下のいずれかが真である。

              *  arg4arg5 で 0 以外である。

              *  arg3TASK_SIZE よりも大きい  (TASK_SIZE  はこのアーキテクチャーでユーザー空間
                 アドレススペースの最大サイズである)。

              *  arg2PR_SET_MM_START_CODE,   PR_SET_MM_END_CODE,   PR_SET_MM_START_DATA,
                 PR_SET_MM_END_DATA, PR_SET_MM_START_STACK のどれかで、対応するメモリ領域のアクセ
                 ス許可が要件を満たしていない。

              *  arg2PR_SET_MM_START_BRKPR_SET_MM_BRK で、 arg3 データセグメントの末尾と
                 同じかそれより前か、 arg3RLIMIT_DATA  リソースリミットを超えてしまうような値
                 が指定されている。

       EINVAL optionPR_SET_PTRACERarg2 が 0, PR_SET_PTRACER_ANY, 既存プロセスの PID のい
              ずれでもない。

       EINVAL optionPR_SET_PDEATHSIG で、 arg2 で指定された値は無効なシグナル番号である。

       EINVAL optionPR_SET_DUMPABLE で、 arg2SUID_DUMP_DISABLE でも SUID_DUMP_USER でもな
              い。

       EINVAL optionPR_SET_TIMING で、 arg2PR_TIMING_STATISTICAL ではない。

       EINVAL optionPR_SET_NO_NEW_PRIVS で、 arg2 が 1 以外か、 arg3, arg4, arg5 のどれかが 0
              ではない。

       EINVAL optionPR_GET_NO_NEW_PRIVS で、 arg2, arg3, arg4, arg5 のどれかが 0 ではない。

       EINVAL optionPR_SET_THP_DISABLEarg3, arg4, arg5 のどれかが 0 ではない。

       EINVAL optionPR_GET_THP_DISABLEarg2, arg3, arg4, arg5 のいずれが 0 ではない。

       EPERM  optionPR_SET_SECUREBITS で、呼び出し元がケーパビリティ CAP_SETPCAP を持っていな
              い。  または、"locked" フラグを解除しようとした。 または、locked フラグがセットされ
              ているフラグをセットしようとした (capabilities(7)  参照)。

       EPERM  optionPR_SET_KEEPCAPS で、呼び出し元のフラグ SECURE_KEEP_CAPS_LOCKED がセットさ
              れている (capabilities(7)  参照)。

       EPERM  optionPR_CAPBSET_DROP で、呼び出し元がケーパビリティ CAP_SETPCAP を持っていな
              い。

       EPERM  optionPR_SET_MM  で、呼び出し元がケーパビリティ  CAP_SYS_RESOURCE  を持っていな
              い。

       EACCES optionPR_SET_MM、かつ arg3PR_SET_MM_EXE_FILE で、ファイルが実行可能ではな
              い。

       EBUSY  optionPR_SET_MM で、 arg3PR_SET_MM_EXE_FILE で、 /proc/pid/exe シンボリック
              リンクを変更しようとしたが、 禁止されている。

       EBADF  optionPR_SET_MM  で、 arg3PR_SET_MM_EXE_FILE で、 arg4 で渡されたファイル
              ディスクリプタが有効ではない。

バージョン

       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.65 の一部である。 プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。