日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
PROCCTL(2) FreeBSD システムコールマニュアル PROCCTL(2) 名称 procctl -- プロセスを制御する ライブラリ 標準 C ライブラリ (libc, -lc) 書式 #include <sys/procctl.h> int procctl(idtype_t idtype, id_t id, int cmd, void *arg); 解説 procctl() システムコールは、プロセスを制御するために提供します。idtype と id 引数は、制御するプロセスの組を指定します。複数のプロセスが識別子と一致 するなら、procctl は、できるだけ選択されたプロセスの多くを制御するために ``best effort'' (最善の努力) を行います。選択されたプロセスが成功して要求 を終了しないなら、エラーが単に返されます。次の識別子のタイプがサポートさ れます: P_PID プロセス ID id があるプロセスを制御します。 P_PGID ID id があるプロセスグループに属するプロセスを制御します。 実行する制御要求は、cmd 引数によって指定されます。次のコマンドがサポート されます: PROC_SPROTECT プロセス保護状態を設定します。これは、システムが利用 可能なメモリとスワップを使い果たすなら、kill される ことから保護されるプロセスをマークするために使用され ます。arg パラメータは、操作と 0 以上のオプションの フラグを含んでいる整数を指さなければなりません。次の 操作がサポートされます: PPROT_SET 保護される選択されたプロセスをマークし ます。 PPROT_CLEAR 選択されたプロセスの保護された状態をク リアします。 次のオプションのフラグがサポートれます: PPROT_DESCEND 各選択されたプロセスに加えて、各選択 されたプロセスのすべての子プロセスに 要求された操作を適用します。 PPROT_INHERIT PPROT_SET とともに使用されるとき、保 護される各選択されたプロセスの将来の 子プロセスをすべてマークします。ま た、将来の子プロセスは、それらの将来 の子プロセスをすべてマークします。 PROC_REAP_ACQUIRE 現在のプロセスのための reaper の状態を獲得します。 reaper 状態は、reaper 状態の獲得が reaper プロセスに repar (再教育) される後に、フォークされたreaper の子 孫によって子供が孤立されたことを意味しています。シス テムの初期化の後に、init(8) は、デフォルトの reaper です。 PROC_REAP_RELEASE 現在のプロセスのための reaper 状態をリリースします。 現在のプロセスの reaper は、現在のプロセスの子孫の新 しい reaper になります。 PROC_REAP_STATUS それが reaper であるとき、指定されたプロセスの reaper に関しての情報、またはプロセス自体を提供しま す。data 引数は、成功して返るとき、システムコールに よって書き込まれる、procctl_reaper_status 構造体を指 さなければなりません。 struct procctl_reaper_status { u_int rs_flags; u_int rs_children; u_int rs_descendants; pid_t rs_reaper; pid_t rs_pid; }; rs_flags は、次のフラグを返させます: REAPER_STATUS_OWNED 指定されたプロセスは、reaper 状態を獲得し、それにリリース されません。フラグが返される とき、指定されたプロセス id pid は、reaper を識別し、そ うでなければ、構造体の rs_reaper フィールドは、指定 されたプロセス id のための reaper の pid に設定されま す。 REAPER_STATUS_REALINIT 指定されたプロセスは、reaper ツリーのルートです、すなわ ち、init(8)。 rs_children フィールドは、子孫のうちの reaper の子供 の数を返します。あらゆる既存の子供のための reaper が、PROC_REAP_ACQUIRE 操作でリセットされないので、 reaper が指定されたプロセスではない子供があることが 可能です。rs_descendants フィールドは、(複数の) reaper の子孫の合計の数を返し、サブツリーの reaper の子孫をカウントしません。rs_reaper フィールドは、 reaper pid を返します。rs_pid フィールドは、いくつか の子孫があるなら、1 つの reaper の子供の pid を返し ます。 PROC_REAP_GETPIDS 指定されたプロセスの reaper の子孫のリストを問い合わ せます。要求は、data パラメータの procctl_reaper_pids 構造体へのポインタを取ります。 struct procctl_reaper_pids { u_int rp_count; struct procctl_reaper_pidinfo *rp_pids; }; 呼び出されるとき、rp_pids フィールドは、返り時に書き 込まれる、procctl_reaper_pidinfo 構造体の配列を指さ なければならず、rp_count フィールドは、ただ、 rp_count 要素がカーネルによって書き込まれる、配列の サイズを指定しなければなりません。 struct procctl_reaper_pidinfo 構造体は、reaper の子 孫の 1 つに関するいくらかの情報を提供します。子供で はない子孫のために、それは、終了したオリジナルの子供 プロセスと終了したプロセスの pid が、関係のないプロ セスのために、再利用される競合のために、不正確に識別 されることに注意してください。 struct procctl_reaper_pidinfo { pid_t pi_pid; pid_t pi_subtree; u_int pi_flags; }; pi_pid フィールドは、子孫のプロセス id です。 pi_subtree フィールドは、プロセスの親 (または祖父母) である reaper の子供の pid を提供します。pi_flags フィールドは、さらなる子孫を記述する、次のフラグを返 します。 REAPER_PIDINFO_VALID procctl_reaper_pidinfo 構造体 がカーネルによって書き込まれ たことを示すように設定しま す。rp_pids 配列を 0 で満た し、REAPER_PIDINFO_VALID フラ グをテストすることは、呼び出 し側が、返された配列の終わり を検出することを可能にしま す。 REAPER_PIDINFO_CHILD pi_pid フィールドは、reaper の直接的な子供を識別します。 REAPER_PIDINFO_REAPER 報告されたプロセス自体は、収 穫者 (reaper) です。下位の収 穫者 (reaper) の子孫は、報告 されません。 PROC_REAP_KILL reaper の子孫のいくらかのサブセットへのシグナルを配 信することを要求します。data パラメータは、返される パラメータと状態の両方のために使用される、 procctl_reaper_kill 構造体を指さなければなりません。 struct procctl_reaper_kill { int rk_sig; u_int rk_flags; pid_t rk_subtree; u_int rk_killed; pid_t rk_fpid; }; rk_sig フィールドは、配信されるシグナルを指定しま す。0 は、kill(2) と違って有効なシグナル番号ではあり ません。rk_flags フィールドは、さらなる操作を指示し ます。それは、次のフラグを論理和 (OR) されます: REAPER_KILL_CHILDREN reaper の直接の子供にだけ指定 されたシグナルを配信します。 REAPER_KILL_SUBTREE rk_subtree フィールドで指定さ れた pid で直接の子供によって フォークされた子孫だけに指定さ れたシグナルを配信します。 REAPER_KILL_CHILDREN も REAPER_KILL_SUBTREE フラグも 指定されないなら、reaper のすべての現在の子孫は、シ グナルが起こされます。 シグナルがあらゆるプロセスに配信されたなら、要求から の返り値は、0 です。この場合に、rk_killed フィールド は、シグナルが起こされたプロセスの数を識別します。 rk_fpid フィールドは、例えば、パーミッションの問題の ために、シグナルの配信が失敗した最初のプロセスの pid に設定されます。そのようなプロセスが存在しないなら、 rk_fpid フィールドは、-1 に設定されます。 PROC_TRACE_CTL 整数引数の値にしたがって、指定された (複数の) プロセ スのトレースを有効にするか、または無効にします。ト レースは、ptrace(2) と ktrace(2), デバックの sysctl hwpmc(4), dtrace(1) とコアダンプを使用して、プロセス へのアタッチメントを含みます。data 引数のために指定 できる値は、次の通りです: PROC_TRACE_CTL_ENABLE それが PROC_TRACE_CTL_DISABLE によって無効にされた後 に、トレースを有効にし ます。自体のためにのみ 許可されます。 PROC_TRACE_CTL_DISABLE 指定されたプロセスのた めにトレースを無効にし ます。プロセスが execve(2) syscall で実 行しているプログラムを 変更するとき、トレース は、再び有効にされま す。子供のプロセスは、 fork(2) で親プロセスか らトレースの設定を引き 継ぎます。 PROC_TRACE_CTL_DISABLE_EXEC PROC_TRACE_CTL_DISABLE と同じですが、execve(2) の後でさえプロセスのた めの設定の持続を除きま す。 PROC_TRACE_STATUS data によって指された整数変数の指定されたプロセスの ための現在のトレースの状態を返します。トレースが無効 にされるなら、data は、-1 に設定されます。トレースが 有効にされますが、デバッガが ptrace(2) syscall に よってアタッチされていないなら、data は、0 に設定さ れます。デバッガがアタッチされるなら、data は、デ バッガプロセスの pid に設定されます。 PROC_TRAPCAP_CTL ENOTCAPABLE または ECAPMODE エラーにいずれかを与える あらゆる syscall からの返りで、指定されたサンドボッ ク化されたプロセスのためのケーパビリティモードのサン ドボックのアクションを制御します。制御が有効であるな ら、syscall からのそのようなエラーは、syscall から返 る直前に、同時的な SIGTRAP シグナルをスレッドに配信 します。 data 引数のために指定できる値は、次の通りです: PROC_TRAPCAP_CTL_ENABLE ケーパビリティモードのアク セス違反で SIGTRAP シグナ ルの配信を有効にします。有 効にされたモードは、プロセ スの子プロセスによって継承 され、fexecve(2) 呼び出し の後に保持されます。 PROC_TRAPCAP_CTL_DISABLE ケーパビリティモードのアク セス違反でシグナルの配信を 無効にします。グローバルな sysctl kern.trap_enotcap は、まだシグナルを配信して いるかもしれないことに注意 してください。capsicum(4) を参照してください。 シグナルの配信において、siginfo シグナルハンドラのパ ラメータの si_errno メンバは、syscall のエラー値に設 定され、si_code メンバは、TRAP_CAP に設定されます。 ケーパビリティモードに関する詳細については、 capsicum(4) を参照してください。 PROC_TRAPCAP_STATUS 指定されたプロセスのためのシグナル伝達ケーパビリティ モードのアクセス違反の現在の状態を返します。data 引 数によって指される整数値は、プロセス制御がシグナルの 配信を有効にするなら、PROC_TRAPCAP_CTL_ENABLE に設定 され、そうでなければ、PROC_TRAPCAP_CTL_DISABLE に設 定されます。 シグナルの配信の独立していグローバルな制御を与える、 上記の sysctl kern.trap_enotcap に関する注を参照して ください。 PROC_PDEATHSIG_CTL 呼び出しているプロセスの親が終了するとき、シグナルの 配信を要求します。idtype は、P_PID でなければなりま せん、id は、有効な違いなしで、呼び出し側の pid また は 0 のいずれかでなければなりません。値は、セット ユーザ ID (set-user-ID) またはセットグループ ID (set-group-ID) バイナリを実行するとき、子プロセスの ためにクリアされます。arg は、呼び出し側に配達される べきシグナルを示しているタイプ int の値を指さなけれ ばなりません。以前に要求されたシグナルの配信をキャン セルするために 0 を使用します。 PROC_PDEATHSIG_STATUS 呼び出しているプロセスの親が終了するとき、配信され る、現在のシグナル数を問い合わせます。idtype は、 P_PID でなければなりません、id は、有効な違いなし で、呼び出し側の pid または 0 のいずれかでなければな りません。arg は、タイプ int の値を保持することがで きるメモリ位置を指さなければなりません。シグナルの配 信が要求されなかったなら、それは、返るときに、0 を含 みます。 PROC_STACKGAP_CTL 指定されたプロセスのスタックギャップを制御します。ス タックギャップは、メモリによって予約され、決して満た されない MAP_STACK マップされた領域のための成長エリ アの部分です。代わりに、プロセスは、ギャップのアクセ スページの SIGSEGV シグナルを受信すると保証されてい ます。ギャップは、スタックと隣接しているスタックオー バフローの破損したメモリに対して保護します。 data 引数は、フラグを含んでいる整数変数を指さなけれ ばなりません。次のフラグが、許可されています: PROC_STACKGAP_ENABLE このフラグは、 PROC_STACKGAP_STATUS と の一貫性のためだけに受け 付けられます。スタック ギャップが有効であるな ら、フラグは、無視されま す。無効にされるなら、フ ラグは、EINVAL エラーを 返します。ギャップがプロ セスで無効にされた後に、 それらは、execve(2) が実 行されるときのみ、再び有 効にすることができます。 PROC_STACKGAP_DISABLE プロセスのためのスタック ギャップを無効にします。 存在するスタックについ て、ギャップは、もはや成 長エリアの予約された部分 ではなく、アクセスでメモ リによって満たされること ができます。 PROC_STACKGAP_ENABLE_EXEC 指定されたプロセスによっ て execve(2) の後に、開 始されたプログラムのため のスタックギャップを有効 にします。 PROC_STACKGAP_DISABLE_EXEC execve(2) の後に、無効の スタックギャップ状態を継 承します。言い換えると、 現在の実行プログラムに、 無効にされたスタック ギャップがあるなら、それ らは、exec で無効にされ 続けられます。ギャップが 有効にされたなら、それら は、exec の後に有効にさ れ続けます。 スタックギャップの状態は、fork(2) の親から継承されま す。 PROC_STACKGAP_STATUS 指定されたプロセスのための現在のスタックギャップの状 態を返します。data は、次のフラグから成るビットマス クを返すために使用される、整数変数を指さなければなり ません: PROC_STACKGAP_ENABLE スタックギャップは、有効 にされます。 PROC_STACKGAP_DISABLE スタックギャップは、無効 にされます。 PROC_STACKGAP_ENABLE_EXEC スタックギャップは、 execve(2) の後に、プロセ スで有効にされます。 PROC_STACKGAP_DISABLE_EXEC スタックギャップは、 execve(2) の後に、プロセ スで無効にされます。 注 プロセスのトレースを無効にすることは、他のシステムメカニズムを通して、 カーネルと特権が与えられたプロセスによって、バイパス可能であるように、セ キュリティ機能と見なすべきではありません。そのようなものとして、それは、 暗号化法のキー入力の素材または他の秘密のデータを確実に保護するために利用 されるべきではありません。 戻り値 エラーが生じるなら、-1 の値が、返され errno は、エラーを示す値に設定され ます。 エラー procctl() システムコールは、次の場合に失敗します: [EFAULT] arg パラメータが、プロセスの割り付けられたアドレス空間 の外側を指しています。 [EINVAL] cmd 引数が、サポートされないコマンドを指定しています。 idtype 引数は、サポートされない識別子のタイプを指定し ます。 [EPERM] 呼び出しているプロセスは、選択されたプロセスのいずれか で、要求された操作を実行する許可がありません。 [ESRCH] プロセスが要求された idtype と id と一致しませんでし た。 [EINVAL] 無効の操作またはフラグが、PROC_SPROTECT コマンドのため の arg で渡されました。 [EPERM] idtype 引数が、P_PID と等しくないか、または id が、 PROC_REAP_ACQUIRE または PROC_REAP_RELEASE 要求のため の、呼び出しているプロセスの pid と等しくありません。 [EINVAL] 無効のまたは未定義のフラグが、PROC_REAP_KILL 要求に渡 されました。 [EINVAL] 無効のまたは 0 のシグナル番号が、PROC_REAP_KILL 要求の ために要求されました。 [EINVAL] PROC_REAP_RELEASE 要求が、init(8) プロセスによって発行 されました。 [EBUSY] PROC_REAP_ACQUIRE 要求が、すでに reaper 状態を獲得した プロセスによって発行され、まだ、それをリリースしません でした。 [EBUSY] PROC_TRACE_CTL 要求が、既にトレースされているプロセス に対して発行されました。 [EPERM] プロセス (PROC_TRACE_CTL_ENABLE) のトレースを再有効に するため、または execve(2) で PROC_TRACE_CTL_DISABLE の持続性を無効にする PROC_TRACE_CTL 要求が、現在でない プロセスのために発行されました。 [EINVAL] PROC_TRACE_CTL または PROC_TRAPCAP_CTL 要求のための整 数 data パラメータの値が、無効です。 [EINVAL] PROC_PDEATHSIG_CTL または PROC_PDEATHSIG_STATUS 要求 が、サポートされていない id, idtype または無効のシグナ ル番号を参照しました。 関連項目 dtrace(1), cap_enter(2), kill(2), ktrace(2), ptrace(2), wait(2), capsicum(4), hwpmc(4), init(8) 歴史 procctl() 関数は、FreeBSD 10.0 で登場しました。reaper 機能は、Linux と DragonflyBSD の同様な機能に基づき、FreeBSD 10.2 ではじめて登場しました。 PROC_PDEATHSIG_CTL 機能は、Linux の prctl(PR_SET_PDEATHSIG, ...) 機能に基 づき、FreeBSD 11.2 ではじめて登場しました。 FreeBSD 11.4 April 25, 2020 FreeBSD 11.4