/proc ファイル
目的
システム内のプロセスおよびスレッドに関する状態情報が含まれます。
構文
#include <sys/procfs.h>説明
/PROC ファイル・システムは、システム内の各アクティブ・プロセスおよびスレッドの状態へのアクセスを提供します。 /PROC ファイル・システム内の各エントリーの名前は、プロセス ID に対応する 10 進数です。 これらの項目はサブディレクトリーであり、それぞれの所有者はプロセスのユーザー ID によって決定されます。 プロセス状態へのアクセスは、各サブディレクトリー内に含まれる追加ファイルによって提供されます。 特に指定されていない限り、 /proc ファイル という用語は、 /PROCをルートとする階層内の非ディレクトリー・ファイルを指しています。 各ファイルの所有者は、プロセスのユーザー ID によって決まります。
さまざまな /PROC ディレクトリー名、ファイル名、およびフィールド名には、 LWP (軽量プロセス) という用語が含まれています。 この用語は、カーネル・スレッドを指します。 /PROC ファイルは、ユーザー・スペース pthread を参照しません。 オペレーティング・システムはスレッドを表すために lwp という用語を使用しませんが、他の UNIX オペレーティング・システムとの互換性のために /proc ファイル・システムで使用されます。
/PROC ファイルへのアクセスには、以下の標準サブルーチン・インターフェースが使用されます。
- オープン サブルーチン
- 閉じる サブルーチン
- 読み取り サブルーチン
- 書き込み サブルーチン
ほとんどのファイルは、プロセス状態を記述し、読み取り専用にすることを目的としています。 CTL (制御) ファイルおよび LWPCTL (スレッド制御) ファイルは、プロセス状態の操作を許可し、書き込み用にのみ開くことができます。 として (アドレス・スペース) ファイルには、実行中のプロセスのイメージが含まれており、読み取りと書き込みの両方のために開くことができます。 書き込みオープンではプロセス制御が許可され、読み取り専用オープンでは検査は許可されますが、プロセス制御は許可されません。 したがって、プロセスに関連する /PROC ファイルのいずれかがそれぞれ読み取りまたは書き込み用にオープンされている場合、そのプロセスは読み取りまたは書き込み用にオープンされていると記述されます。
一般に、複数のプロセスが同時に同じ /PROC ファイルを開くことができます。 排他的オープンは、別のプロセスが同時にファイルをオープンしようとすることなく、プロセス制御を可能にすることを目的としています。 プロセスは、 オープン サブルーチンで OCL (_EXCL) フラグを指定しながら、書き込みのためにターゲット・プロセス内の /PROC ファイル ( として ファイルまたは CTL ファイル、あるいは任意のカーネル・スレッドの LWPCTL ファイル) を正常にオープンすると、ターゲット・プロセスの排他制御を取得できます。 ターゲット・プロセスが既に書き込みのためにオープンされている場合 (つまり、 CTL、 として、または LWPCTL ファイルが書き込みのためにオープンされている場合)、 オープン サブルーチンの呼び出しは失敗します。 オープン サブルーチンの複数の並行読み取り専用インスタンスが存在することができます。 オープン サブルーチンでは、読み取りのために OCL (_EXCL) フラグは無視されます。 制御プロセスによる書き込みのための最初のオープンでは、 OCL (_EXCL) フラグを使用する必要があります。 複数のプロセスが同じターゲット・プロセスを制御しようとすると、通常はエラーになります。
シーク サブルーチンを呼び出して として ファイルを対象の仮想アドレスに位置付けることにより、トレースされるプロセスのアドレス・スペース内の任意の場所との間でデータを転送することができます。その後、 読み取り サブルーチンまたは 書き込み サブルーチンへの呼び出しが行われます。 マップされていない領域に拡張される入出力要求は、境界で切り捨てられます。 マップされていない仮想アドレスで始まる 読み取り または 書き込み 要求は、 エラー番号 が エボーに設定されて失敗します。
prfillset(&set); /* turn on all flags in set */
premptyset(&set); /* turn off all flags in set */
praddset(&set, flag); /* turn on the specified flag */
prdelset(&set, flag); /* turn off the specified flag */
r = prismember(&set, flag); /* != 0 if flag is turned on */他の操作で使用する前に、 プリフィルセット または プリンプチセット マクロを使用して PR_SIGSET_T または フラグ _t 型を初期化する必要があります。 旗 パラメーターは、該当するセットに対応する列挙型のメンバーでなければなりません。
int num; /* Specifies the systemcall's number from sysent */
uint64_t sysnum; /* Specifies the number of elements in pr_set array */
uint64_t syssize; /* Allocates the size */
sysset_t *set; /* Specifies the pointer to sysset_t */
sysnum = (num - 1)/64 + 1;
syssize = (sysnum + 1) * sizeof(uint64_t);
set = (sysset_t *)malloc(syssize);
set->pr_size = sysnum;
prfillsysset(set) /* set all syscalls in the sysset */
premptysysset(set) /* clear all syscalls in the sysset */
praddsysset(set, num) /* set specified syscall in the sysset */
prdelsysset(set, num) /* clear specified syscall in the sysset */
prissyssetmember(set, num) /* !=0 if specified syscall is set */システム・コールの詳細については、 システム送信 ファイルの説明を参照してください。
すべてのアクティブ・プロセスには、少なくとも 1 つのカーネル・スレッドが含まれています。 各カーネル・スレッドは、オペレーティング・システムによって個別にスケジュールされる実行のフローを表します。 プロセス内のすべてのカーネル・スレッドは、アドレス・スペースおよびその他の多くの属性を共用します。 CTL ファイルと LWPCTL ファイルを使用すると、操作に応じて、プロセス内の個々のカーネル・スレッドを操作することも、一度にすべてのカーネル・スレッドを操作することもできます。
プロセスに複数のカーネル・スレッドがある場合、特定のプロセス状況ファイルおよび制御操作のために、システムによって代表的なスレッドが選択されます。 代表的なスレッドは、すべてのプロセスのスレッドが停止している場合にのみ停止されます。 代表的なスレッドは、すべてのスレッドが停止している場合にのみ 対象となる事象 上で停止することができます。または、対象となる他のイベントが存在しない場合にのみ、 要求済み の停止によって停止することができます。
代表的なスレッドは、対象のイベントですべてのスレッドが停止しているか、 一時停止 が停止しており、どのスレッドにも プCRUN オペランドが適用されていない限り、固定されたままになります。
プロセス制御ファイル (CTL) に適用されると、カーネル・スレッドに影響を与えるすべての /PROC 制御操作は、同じアルゴリズムを使用して、処理対象のカーネル・スレッドを選択します。 同期停止の場合 ( PC セットを参照)、この動作により、アプリケーションは、プロセス・レベルの状況および制御ファイルのみを使用して、マルチスレッド・プロセスを制御することができます。 より詳細な制御を行うには、スレッド固有の LWPCTL ファイルを使用します。
/PROC ファイル・システムは、32 ビットと 64 ビットの両方の制御プロセスで使用して、32 ビットと 64 ビットの両方のターゲット・プロセスに関する情報を取得できます。 /PROC ファイルは、64 ビット対応モードの不変ファイルをすべてのオブザーバーに提供します。 制御プロセスのモードは、 /PROC データのフォーマットには影響しません。 データは、32 ビットと 64 ビットの両方の制御プロセスに同じフォーマットで戻されます。 /PROC ファイル内のアドレスおよび該当する長さとオフセットのフィールドの長さは 8 バイトです。
ディレクトリー構造
最上位の /PROC ディレクトリーには、システム内の既存のプロセスを指定する項目が含まれています。 このディレクトリー内のエントリーの名前は、プロセス ID (pid) 番号です。 これらの項目はディレクトリーです。 特に注記がない限り、以下に示すファイルは読み取り専用です。 さらに、プロセスが ゾンビ ( 出口 呼び出しによって親によって終了されたが、 待機 呼び出しによって中断されていないプロセス) になると、関連する /PROC ファイルのほとんどがディレクトリー構造から消えます。 通常、後で、プロセスが終了する前に開かれたファイルのオープン、読み取り、または書き込みを行おうとすると、 ENOENT (E) メッセージが出されます。 例外は注記されています。
/PROC ファイルには、システム内のプロセスおよびスレッドの状態を示すデータが含まれています。 この状態は、システムの稼働中は常に変化しています。 /PROC ファイルの読み取りによるシステム・パフォーマンスの負荷を軽減するために、 /PROC ファイル・システムは、それらのファイルのデータの収集中にシステム・アクティビティーを停止しません。 /PROC ファイルの 1 回の読み取りでは、通常、プロセスまたはスレッドの状態の一貫性のあるかなり正確な表現が返されます。 ただし、プロセスまたはスレッドが実行されると状態が変化するため、 /PROC ファイルを複数回読み取ると、異なるデータを示す表現が返される可能性があるため、相互に整合していないように見えることがあります。
/proc/pid ファイル構造
/処理/PID ディレクトリーには、以下の項目が含まれます (ただし、これらに限定されません)。
- として
- プロセスのアドレス・スペース・イメージが入っています。 として ファイルは、読み取りと書き込みの両方の目的で開くことができます。 シーク サブルーチンは、ファイルをインタレストの仮想アドレスに位置付けるために使用されます。 その後、 読み取り サブルーチンと 書き込み サブルーチンをそれぞれ使用して、アドレス・スペースを表示および変更することができます。
- 制御
- 書き込み専用ファイル。このファイルに構造化メッセージが書き込まれ、プロセスの状態の一部を変更したり、何らかの方法でその動作を制御したりするようにシステムに指示します。 シーク・オフセットは、このファイルへの書き込み時には関係ありません。詳細については、制御メッセージのタイプを参照してください。 個々のスレッドにも LWPCTL ファイルが関連付けられています。 制御メッセージは、プロセスの CTL ファイルまたは特定の LWPCTL ファイルのいずれかに、記述されているように操作固有の影響を付けて書き込むことができます。 制御メッセージの効果は、該当する状況および情報ファイルを通じて可視であるプロセスの状態に即時に反映されます。
- 状況
- プロセスおよびその代表的なスレッドの 1 つに関する状態情報が含まれます。 ファイルは、以下のメンバーを含む struct pstatus タイプとしてフォーマットされます。
uint32_t pr_flag; /* process flags from proc struct p_flag */ uint32_t pr_flag2; /* process flags from proc struct p_flag2 */ uint32_t pr_flags; /* /proc flags */ uint32_t pr_nlwp; /* number of threads in the process */ char pr_stat; /* process state from proc p_stat */ char pr_dmodel; /* data model for the process */ char pr__pad1[6]; /* reserved for future use */ pr_sigset_t pr_sigpend; /* set of process pending signals */ prptr64_t pr_brkbase; /* address of the process heap */ uint64_t pr_brksize; /* size of the process heap, in bytes */ prptr64_t pr_stkbase; /* address of the process stack */ uint64_t pr_stksize; /* size of the process stack, in bytes */ pid64_t pr_pid; /* process id */ pid64_t pr_ppid; /* parent process id */ pid64_t pr_pgid; /* process group id */ pid64_t pr_sid; /* session id */ struct pr_timestruc64_t pr_utime; /* process user cpu time */ struct pr_timestruc64_t pr_stime; /* process system cpu time */ struct pr_timestruc64_t pr_cutime; /* sum of children's user times */ struct pr_timestruc64_t pr_cstime; /* sum of children's system times */ pr_sigset_t pr_sigtrace; /* mask of traced signals */ fltset_t pr_flttrace; /* mask of traced hardware faults */ uint32_t pr_sysentry_offset; /* offset into pstatus file of sysset_t * identifying system calls traced on * entry. If 0, then no entry syscalls * are being traced. */ uint32_t pr_sysexit_offset; /* offset into pstatus file of sysset_t * identifying system calls traced on * exit. If 0, then no exit syscalls * are being traced. */ uint64_t pr__pad[8]; /* reserved for future use */ lwpstatus_t pr_lwp; /* "representative" thread status */状況 ファイルのメンバーについて、以下に説明します。
- 前のフラグ
- これらのフラグを保持するビット・マスクを指定します。
- PR システム
- プロセスはカーネル・プロセスです ( PCSTOP (停止)を参照)。
- PR_FORK
- プロセスに継承オンフォーク・フラグが設定されている ( PC セットを参照)
- PR_RLC (R)
- プロセスの run-on-last-close フラグが設定されている ( PC セットを参照)
- PR_KLC
- プロセスの kill-on-last-close フラグが設定されている ( PC セットを参照)
- PR 非同期
- プロセスに非同期停止フラグが設定されている ( PC セットを参照)
- PR から PTRACE
- プロセスは ptrace サブルーチンによって制御されます。
- 前 _nlwp
- プロセス内のスレッドの総数を指定します。
- Pr_brkbase
- プロセス・ヒープの仮想アドレスを指定します。
- Pr_brksize
- プロセス・ヒープのサイズをバイト単位で指定します。注: Pr_brkbase と Pr_brksize の合計によって形成されるアドレスは、プロセス 中断 ( Brk サブルーチンを参照) です。
- 標準ベースの
- プロセス・スタックの仮想アドレスを指定します。
- Pr_stksize
- プロセス・スタックのサイズをバイト単位で指定します。注: 各スレッドは別々のスタックで実行されます。 オペレーティング・システムは、必要に応じてプロセス・スタックを拡張します。
- PUID
- プロセス ID を指定します。
- プリップ ID
- 親プロセス ID を指定します。
- PGID
- プロセス・グループ ID を指定します。
- PR_SID
- プロセスのセッション ID を指定します。
- Pr_utime
- プロセスが消費したユーザー CPU 時間を示します。
- 前の時間
- プロセスによって消費されたシステム CPU 処理時間を示します。
- Pr_cutime
- プロセスの子によって消費された累積ユーザー CPU 時間を秒およびナノ秒で示します。
- 時間の前処理
- プロセスの子によって消費された累積システム CPU 時間 (秒およびナノ秒) を指定します。
- 事前署名トレース
- トレースされるシグナルのセットを指定します ( PCSTRACE (E) シグナルを参照)。
- フラグ・トレース
- トレースされるハードウェア障害のセットを指定します ( PCSフォールト シグナルを参照)。
- 期間 sysentry_offset
- ゼロ以外の場合は、システム・コール・エントリーでトレースされるシステム・コールの システム・セット セットに対する 状況 ファイルへのオフセットが含まれます ( PCSENTRY (送信) シグナルを参照)。 プロセスのシステム・コール・トレースがアクティブでない場合、このフラグはゼロです。
- PL_SYセクシット・オフセット
- ゼロ以外の場合は、システム・コール出口でトレースされるシステム・コールの システム・セット セットに対する 状況 ファイルへのオフセットが含まれます ( _ 翻訳不要 _PCSEXIT シグナルを参照)。 プロセスのシステム・コール・トレースがアクティブでない場合、このフィールドはゼロになります。
- 前 _lwp
- プロセスがゾンビでない場合は、代表的なスレッドを記述する LWP 状況 _T 構造体が含まれます。 この構造体の内容は、 lwpstatus ファイルから読み取られた場合と同じ意味を持ちます。
- PINFO
- Ps コマンドが必要とするプロセスに関する情報が入っています。 プロセスに複数のスレッドが含まれている場合、 LWPSCINFO 情報を派生させるために代表的なスレッドが使用されます。 ファイルは 構造 psinfo タイプとしてフォーマット設定され、以下のメンバーを含んでいます。
uint32_t pr_flag; /* process flags from proc struct p_flag */ uint32_t pr_flag2; /* process flags from proc struct p_flag2 */ uint32_t pr_nlwp; /* number of threads in process */ uid_t pr_uid; /* real user id */ uid_t pr_euid; /* effective user id */ gid_t pr_gid; /* real group id */ gid_t pr_egid; /* effective group id */ uint32_t pr_argc; /* initial argument count */ pid64_t pr_pid; /* unique process id */ pid64_t pr_ppid; /* process id of parent */ pid64_t pr_pgid; /* pid of process group leader */ pid64_t pr_sid; /* session id */ dev64_t pr_ttydev; /* controlling tty device */ prptr64_t pr_addr; /* internal address of proc struct */ uint64_t pr_size; /* size of process image in KB (1024) units */ uint64_t pr_rssize; /* resident set size in KB (1024) units */ struct pr_timestruc64_t pr_start; /* process start time, time since epoch */ struct pr_timestruc64_t pr_time; /* usr+sys cpu time for this process */ prptr64_t pr_argv; /* address of initial argument vector in user process */ prptr64_t pr_envp; /* address of initial environment vector in user process */ char pr_fname[PRFNSZ]; /* last component of exec()ed pathname*/ char pr_psargs[PRARGSZ]; /* initial characters of arg list */ uint64_t pr__pad[8]; /* reserved for future use */ struct lwpsinfo pr_lwp; /* "representative" thread info */注: PINFO ファイル内の一部の項目 ( 前のフラグ、 pr_flag2、および 前のアドレスなど) は、内部カーネル・データ構造を参照しており、オペレーティング・システムの異なるバージョン間で意味を保持しない場合があります。 これらはプログラムにとっては意味がなく、実装の詳細をユーザーが手動で解釈する場合にのみ役立ちます。PINFO ファイルは、プロセスがゾンビになった後にアクセス可能になります。
前 _lwp フラグは、選択された代表的なスレッドを記述します。 プロセスがゾンビの場合、 pr_nlwp および pr_lwp.pr_lwpid フラグはゼロであり、 pr_lwp の他のフィールドは未定義です。
- マップ
- プロセスの仮想アドレス・マップに関する情報が含まれます。 このファイルには、 プリマップ 構造体の配列が含まれています。各構造体は、トレース・プロセスのアドレス・スペース内の連続した仮想アドレス領域を記述します。注: マップ ファイルには、プロセスにロードされるオブジェクトを含むプロセスの仮想アドレス領域の項目のみを含めることができます。プリマップ 構造体には、以下のメンバーが含まれます。
uint64_t pr_size; /* size of mapping in bytes */ prptr64_t pr_vaddr; /* virtual address base */ char pr_mapname[PRMAPSZ]; /* name in the /proc/pid/object object */ uint64_t pr_off; /* offset to the mapped object, if any */ uint32_t pr_mflags; /* protection and attribute flags */ uint32_t pr_pathoff; /* if map indicates the entry for a loaded object, * offset points to a null-terminated path name followed * by a null-terminated member name. * If the offset is mapped to a file and it is not an * archive file, the member name is null. * The offset is 0 if map entry is * not applicable for a loaded object. */ int32_t pr_shmid; /* shared memory ID for the MA_SHM or * MA_RTSHM region. * <0 indicates that teh shared memory ID is not * available. */ dev64_t pr_dev; /* the dev_t data structure for the MA_FILEMAP file. * -1 indicates that the dev_t is not available * -2 indicates that the file is on remote filesystem, * -3 indicates that the file is in a WPAR. */ ino64_t pr_ino; /* The inode datastructure for the MA_FILEMAP file. * -1 indicates that the ino_t data structure is not * available */ vmid64_t pr_vsid; /* virtual segment ID for the first segment * in the region. */メンバーについて以下に説明します。
- PR_VADDRR
- トレース・プロセス内のマッピングの仮想アドレスを指定します。
- 前のサイズ
- トレース・プロセス内のマッピングのサイズを指定します。
- マップ名
- 空ストリングでない場合は、 オブジェクト ディレクトリーにあり、仮想アドレスがマップされるオブジェクトのファイル・ディスクリプターを含むファイルの名前が入ります。 ファイルは オープン サブルーチンによってオープンされます。
- オフにする
- 仮想アドレスがマップされるマップされたオブジェクト (存在する場合) 内のオフセットを含みます。
- PERFF
- ゼロ以外の場合は、ロードされたオブジェクトのパス名およびアーカイブ・メンバー名に対する マップ ファイル内のオフセットが含まれます。
- フラグの削除
- 保護のビット・マスクおよび以下の属性フラグを指定します。
- MA_MAINEXEC
- プロセス内のメイン実行可能ファイルにマッピングが適用されることを示します。
- 中断 (MA_BREAK)
- マッピングがプロセス内のプログラム・データおよびヒープ範囲に適用されることを示します。
- スタック (MA_STACK)
- プロセス内のスタック範囲にマッピングが適用されることを示します。
- MA_MMAP
- mmap サブルーチンを使用してプロセスにマップされるオブジェクトにマッピングが適用されることを示します。
- MA_RTSHM
- シャM_OPEN サブルーチンによって作成される POSIX リアルタイム・オブジェクトにマッピングが適用されることを示します。
- これらのオブジェクトは、
mmapサブルーチンを使用してプロセスにマップされます。
- MA_SHM (M)
- シュマット サブルーチンを使用してプロセスにマップされるオブジェクトにマッピングが適用されることを示します。
- MA ファイル・マップ
mmapサブルーチンまたはshmatサブルーチンを使用してプロセスにマップされるファイル・オブジェクトにマッピングが適用されることを示します。- 作業 (MA_WORK)
- ローダーまたは他のカーネル・サブシステムによってプロセスにマップされるメモリーにマッピングが適用されることを示します。
- MA_RMMAP
- マップ作成 サブルーチンを使用してプロセスにマップされるメモリーまたは入出力領域にマッピングが適用されることを示します。
- MA_KERNTEXT (M)
- プロセスにマップされるカーネル・メモリーにマッピングが適用されることを示します。
- MA_PS4K
- マッピングが 4 KB の物理メモリー・ブロックによってサポートされることを示します。
- MA_PS64K
- マッピングが 64 KB の物理メモリー・ブロックによってサポートされていることを示します。
- MA_PS16M
- マッピングが 16 MB の物理メモリー・ブロックによってサポートされていることを示します。
- MA_PS16G
- マッピングが 16 GB の物理メモリー・ブロックによってサポートされることを示します。
- MA_READ (読み取り)
- トレース・プロセスがマッピングを読み取ることができることを示します。
- MA 書き込み
- マッピングがトレース・プロセスによって書き込み可能であることを示します。
- MA_EXEC (M)
- マッピングがトレース・プロセスによって実行可能であることを示します。
- MA_共有
- マッピング変更がマップされたオブジェクトによって共有されることを示します。
- PR_SUID
- MA_SHM マッピングの場合、マッピングの System V 共有メモリー ID が含まれます。 ipcs -m コマンドを使用して、共用メモリー ID を表示します。
- 開発前
- MA_FILEMAP マッピングの場合は、マップされたファイルのデバイス ID 番号が含まれます。
- プリノ
- MA_FILEMAP マッピングの場合、
pr_devフィールド内のデバイス ID に関連するマップ・ファイルの i ノード番号が含まれます。 - VSID の
- マッピング内の最初の仮想メモリー・マネージャー・セグメント ID が含まれます。
同じ基礎となるマップされたオブジェクトを持つアドレス・スペースの連続する領域は、読み取り、書き込み、実行、および共有の属性が異なるため、複数のマッピングとして表示されることがあります。 基礎となるマップ・オブジェクトは、単一マッピングの範囲全体では変更されません。 MA_SHARED とマークされたマッピングに対する入出力操作は、基礎となるマップ・オブジェクト内の有効なページに対応しない仮想アドレスで適用されると失敗します。 専用マッピングに対する読み取り操作と書き込み操作は常に成功します。 マップされていないアドレスに対する読み取り操作と書き込み操作は、常に失敗します。
- cred
- プロセスに関連付けられた資格情報の説明が含まれます。 ファイルは struct prcred タイプとしてフォーマット設定され、以下のメンバーを含んでいます。
uid_t pr_euid; /* effective user id */ uid_t pr_ruid; /* real user id */ uid_t pr_suid; /* saved user id (from exec) */ gid_t pr_egid; /* effective group id */ gid_t pr_rgid; /* real group id */ gid_t pr_sgid; /* saved group id (from exec) */ uint32_t pr_ngroups; /* number of supplementary groups */ gid_t pr_groups[1]; /* array of supplementary groups */ - システム送信
- プロセスで使用可能なシステム・コールに関する情報が含まれます。 このファイルを使用して、トレースする特定のシステム・コールの番号を見つけることができます。 これは、 lwpstatus ファイルに戻されるシステム・コール番号に関連したシステム・コールの名前を見つけるために使用できます。
ファイルは、ヘッダー・セクションとそれに続くエントリーの配列で構成されます。各エントリーは、プロセスに提供されるシステム・コールに対応します。 各配列項目には、システム・コール番号と、そのシステム・コールのヌル終了名までの システム送信 ファイルへのオフセットが含まれています。
システム送信 ファイルは、以下の属性によって特徴付けられます。
- システム・コール名は、エクスポートされたシステム・コールの実際のカーネル名です。
- 配列内のエントリーには、特定の順序はありません。
- システム・コール番号にギャップがある可能性があります。
- プロセスによって、特に 32 ビット・プロセスと 64 ビット・プロセスの間で、システム・コールの名前と番号が異なる場合があります。 同じ名前または番号が異なるプロセスにまたがっていると想定しないでください。
- システム・コールのセットは、オペレーティング・システムの実行中に変更される可能性があります。 オペレーティング・システムの実行中にシステム・コールを追加できます。
- システム・コールの名前と番号は、異なるリリース内で、またはサービスがシステムに適用されるときに変更される可能性があります。
- cwd
- プロセスの現行作業ディレクトリーへのアクセスを提供するリンク。 すべてのプロセスは、必要な許可を持っていれば、このリンクを介してプロセスの現行作業ディレクトリーにアクセスできます。
- fd
- プロセスのすべてのオープン・ファイル記述子のファイルが入っています。 各項目は、プロセス内のオープン・ファイル記述子に対応する 10 進数です。 項目が通常のファイルを参照している場合には, 通常のファイル・セマンティクスでオープンすることができます。 競合プロセスがこれ以上アクセスできないようにするために、制御されたプロセスには、それ自体の読み取り/書き込みオープン・モード以外のファイル・アクセス・モードはありません。 ディレクトリーはリンクとして表示されます。 その他のタイプのエントリーを開こうとすると失敗します (したがって、リストされている場合は 0 個の許可が表示されます)。
- オブジェクト
- ターゲット・プロセスのアドレス・スペースにマップされたオブジェクトに対応する、 マップ ファイルの項目に表示される名前を持つ読み取り専用ファイルを含むディレクトリー。 このようなファイルを開くと、特定のアドレス・スペース領域に関連付けられたマップ・ファイルの記述子が生成されます。 a.out という名前は、実行中のプロセスのテキストに関連付けられた実行可能ファイルの同義語としてディレクトリーにも表示されます。
オブジェクト・ディレクトリーを使用すると、最初にプロセスが特定のパス名を取得することなく、制御プロセスがオブジェクト・ファイルおよびすべての共用ライブラリー (およびその結果としてシンボル・テーブル) にアクセスできるようになります。
- ルート
- プロセスの現行ルート・ディレクトリーへのアクセスを提供するリンク。 すべてのプロセスは、このリンクを介してプロセスの現行ルート・ディレクトリーにアクセスできます。ただし、そのプロセス (ルート・ディレクトリーにアクセスしようとするプロセス) に必要な許可がある場合に限ります。
- mmap
- stat64x 構造体の配列を含むファイル。 各構造は、プロセスが所有するメモリー・マップ領域に関連付けられたファイルに関する情報を記述します。
- lwp
- エントリーを含むディレクトリー。各エントリーは、収容プロセス内のカーネル・スレッドを指定します。 このディレクトリー内のエントリーの名前は、スレッド ID (tid) 番号です。 これらの項目は、以下で説明する追加ファイルを含むディレクトリーです。
/proc/pid/lwp/tid 構造体
ディレクトリー /処理/PID/LWP/ID には、以下の項目が含まれています。
- LWPCTL
- これは書き込み専用制御ファイルです。 このファイルに書き込まれるメッセージは、プロセス全体 (該当する場合) ではなく、関連するスレッドのみに影響します。
- lwpステータス
- スレッド固有の状態情報が入っています。 この情報は、代表スレッドのプロセスの 状況 ファイルにもあります。 ファイルは struct lwpstatus としてフォーマット設定され、以下のメンバーを含んでいます。
uint64_t pr_lwpid; /* specific thread id */ uint32_t pr_flags; /* thread status flags */ char pr_state; /* thread state - from thread.h t_state */ uint16_t pr_cursig; /* current signal */ uint16_t pr_why; /* reason for stop (if stopped) */ uint16_t pr_what; /* more detailed reason */ uint32_t pr_policy; /* scheduling policy */ char pr_clname[PRCLSZ]; /* printable character representing pr_policy */ pr_sigset_t pr_lwppend; /* set of signals pending to the thread */ pr_sigset_t pr_lwphold; /* set of signals blocked by the thread */ pr_siginfo64_t pr_info; /* info associated with signal or fault */ pr_stack64_t pr_altstack; /* alternate signal stack info */ struct pr_sigaction64 pr_action; /* signal action for current signal */ uint16_t pr_syscall; /* system call number (if in syscall) */ uint16_t pr_nsysarg; /* number of arguments to this syscall */ uint64_t pr_sysarg[PRSYSARGS]; /* arguments to this syscall */ prgregset_t pr_reg; /* general and special registers */ prfpregset_t pr_fpreg; /* floating point registers */ pfamily_t pr_family; /* hardware platform specific information */lwpstatus ファイルのメンバーについて、以下に説明します。
- 前のフラグ
- これらのフラグを保持するビット・マスクを指定します。
- 停止済み
- スレッドが停止していることを示します。
- PR_ISTOP
- 対象のイベントでスレッドが停止したことを示します ( PCSTOP (停止) シグナルを参照)。
- PR 停止
- スレッドで stop ディレクティブが有効になっていることを示します ( PCSTOP (停止) シグナルを参照)。
- プリン
- スレッドは、システム・コール内で割り込み可能なスリープ状態にあります。
- PR_NOREGS (R)
- スレッドのレジスター状態が提供されませんでした
- pr_why および pr_what
- スレッドが停止した理由を示します。 理由 メンバーに指定できる値は、以下のとおりです。
- 要求済み
- 通常、 PCSTOP (停止) シグナルが適用されたため、または対象のイベントで別のスレッドが停止し、プロセスに対して非同期停止フラグ ( PC セット シグナルを参照) が設定されなかったために、スレッドが停止したことを示します。 この場合、 前の内容 メンバーは使用されません。
- PR_SIGNALLED
- シグナルの受信時にスレッドが停止したことを示します ( PCSTRACE (E) シグナルを参照)。 前の内容 シグナルは、停止の原因となったシグナル番号を保持します (新規に停止したスレッドの場合は、 前 _cursig メンバーに同じ値が与えられます)。
- よくある質問 (PR_FAULTED)
- ハードウェア障害が発生したときにスレッドが停止したことを示します (PCSFAULT シグナルを参照)。 前の内容 メンバーには、停止の原因となった障害番号が含まれています。
- PR_SYSENTRY
- システム・コールに入ったときの停止を示します ( PCSENTRY (送信) シグナルを参照)。 前の内容 メンバーには、システム・コール番号が含まれています。
- PR_SYSEXIT (R)
- システム・コールからの出口での停止を示します ( _ 翻訳不要 _PCSEXIT シグナルを参照)。 前の内容 には、システム・コール番号が含まれます。
- PR ジョブ制御
- ジョブ制御停止シグナルのデフォルト・アクションのためにスレッドが停止したことを示します ( 署名アクション サブルーチンを参照)。 前の内容 メンバーには、停止シグナル番号が含まれています。
- 前の論理ページ ID
- 特定のスレッド入出力の名前を指定します。
- 前 _cursig
- 現在のシグナルを指定します。これは、スレッドに送信される次のシグナルです。 スレッドが PR_SIGNALLED または よくある質問 (PR_FAULTED) シグナルによって停止されると、 事前情報 メンバーには、特定のシグナルまたは障害に関する追加情報が含まれます。 事前情報 メンバーに含まれるデータの量は、停止タイプと、シグナル・ハンドラーの確立時にアプリケーションが SA_SIGINFO (S) フラグを指定したかどうかによって異なります。 よくある質問 (PR_FAULTED) が停止し、 SA_SIGINFO (S) フラグが指定されなかった場合は PR_SIGNALLED が停止すると、si_signo、si_code、および si_addr 事前情報 フィールドにのみデータが入ります。 SA_SIGINFO (S) フラグが指定されている場合に PR_SIGNALLED が停止すると、他の 事前情報 フィールドにもデータが入ります。
- プリアクション
- 現行シグナルに関するシグナル・アクション情報が入っています。 前 _cursig メンバーがゼロの場合、このメンバーは未定義です。 署名アクション サブルーチンを参照してください。
- 保留 (pr_lwppend)
- スレッドに対して保留中の同期的に生成されたシグナルまたはスレッド指示シグナルを識別します。 プロセス・レベルで保留中のシグナルは含まれません。
- スタックの印刷
- スレッドの代替シグナル・スタック情報が入っています。 サインスタック サブルーチンを参照してください。
- Syscall
- スレッドによって実行されているシステム・コールの番号 (ある場合) を指定します。 スレッドが PR_SYSENTRY または PR_SYSEXIT (R)で停止している場合に限り、ゼロ以外の値になります。
Syscall メンバーがゼロ以外の場合、 PR_NSYSARG メンバーはシステム呼び出しに対する引数の数であり、 PR_SYSARG 配列には引数が含まれます。 PR_NSYSARG メンバーは常に 8 (システム・コール・パラメーターの最大数) に設定されます。 PR_SYSARG メンバーには、常に 8 つの引数が含まれています。
- 前のクラス名
- スレッドのスケジューリング・クラスの名前が入っています。
- 前の調整
- スレッド汎用レジスターおよび特殊レジスターを含む構造体。 この構造体のサイズとフィールド名は、マシンによって異なります。 特定のマシンのこの構造の説明については、 <sys/m_procfs.h> ヘッダー・ファイルを参照してください。 スレッドが停止していない場合、この構造体の内容は未定義です。
- プリプレグ
- スレッド浮動小数点レジスターを含む構造体。 この構造体のサイズとフィールド名は、マシンによって異なります。 スレッドが停止していない場合、この構造体の内容は未定義です。
- 製品ファミリー
- スレッドに関するマシン固有の情報が含まれます。 このフィールドの使用は、異なるアーキテクチャー間で移植することはできません。 製品ファミリー 構造体には、拡張コンテキスト・オフセットとサイズ・フィールドが含まれています。これらのフィールドがゼロ以外の場合は、スレッドの拡張マシン・コンテキスト情報が使用可能であることを示します。 その後、指定されたオフセットおよびサイズで 状況 ファイルまたは lwpstatus ファイルを読み取ると、 プリクセット 構造体に対応する拡張コンテキスト情報が取得されます。 あるいは、 lwpstatus ファイル全体を読み取り、 プリクセット 拡張子を含む struct lwpstatusxとしてフォーマット設定することもできます。 製品ファミリー 拡張コンテキスト・オフセットおよびサイズ・メンバー (ゼロ以外の場合) は、 LWPSTATUSX 構造体の プリクセット メンバーが有効かどうかを示します。
- LWPSCINFO
- Ps コマンドが必要とするスレッドに関する情報が入っています。 この情報は、代表スレッドのプロセスの PINFO ファイルにも存在します (ある場合)。 ファイルは、以下のメンバーを含む 構造体 lwpsinfo タイプとしてフォーマットされます。
uint64_t pr_lwpid; /* thread id */ prptr64_t pr_addr; /* internal address of thread */ prptr64_t pr_wchan; /* wait addr for sleeping thread */ uint32_t pr_flag; /* thread flags */ uchar_t pr_wtype; /* type of thread wait */ uchar_t pr_state; /* numeric scheduling state */ char pr_sname; /* printable character representing pr_state */ uchar_t pr_nice; /* nice for cpu usage */ int pr_pri; /* priority, high value = high priority*/ uint32_t pr_policy; /* scheduling policy */ char pr_clname[PRCLSZ]; /* printable character representing pr_policy */ cpu_t pr_onpro; /* processor on which thread last ran */ cpu_t pr_bindpro; /* processor to which thread is bound */LWPSCINFO ファイル内の一部の項目 ( 前のフラグ、 前のアドレス、 前の状態、 作業タイプ、および プランWチャンなど) は、内部カーネル・データ構造を参照するため、オペレーティング・システムの異なるバージョン間でその意味を保持することは期待できません。 これらはプログラムには意味がなく、実装の詳細を認識するユーザーが手動で解釈する場合にのみ役立ちます。
制御メッセージ
プロセス状態の変更は、プロセスの CTL ファイルまたは個々のスレッドの LWPCTL ファイルに書き込まれるメッセージによって影響を受けます。 すべての制御メッセージは、特定の操作を識別する 整数 命令コードと、それに続くオペランドを含む追加データ (ある場合) で構成されます。 複数の制御メッセージを単一の 書き込み サブルーチンで制御ファイルに結合することはできますが、部分的な書き込みは許可されません。 各制御メッセージ (命令コードとオペランド) は、いくつかのシステム・コールを介して分割して表示するのではなく、 書き込み サブルーチン全体に対して表示する必要があります。
- PCSTOP、PCDSTOP、PCWSTOP
- プロセス制御ファイルに適用されると、
- PCSTOP (停止) は、すべてのスレッドを停止するように指示し、それらのスレッドが停止するのを待ちます。
- PCDSTOP (停止) は、すべてのスレッドが停止するのを待たずに停止するように指示します。
- PCWSTOP (P) は、単にすべてのスレッドが停止するのを待機します。
スレッド制御ファイルに適用されると、
- PCSTOP (停止) は、特定のスレッドを停止するように指示し、停止するまで待機します。
- PCDSTOP (停止) は、特定のスレッドが停止するのを待たずに停止するように指示します。
- PCWSTOP (P) は、単にスレッドが停止するのを待機します。
スレッド制御ファイルに適用されると、 PCSTOP (停止) および PCWSTOP (P) は、対象となるイベントでスレッドが停止したときに完了し、スレッドが既に停止している場合は即時に完了します。
プロセス制御ファイルに適用されると、 PCSTOP (停止) および PCWSTOP (P) は、対象のイベントですべてのスレッドが停止したときに完了します。
対象となる事象 は、 要求済み の停止、またはプロセスのトレース・フラグ ( PCSTRACE (E)、 PCSフォールト、 PCSENTRY (送信)、および _ 翻訳不要 _PCSEXITによって設定される) に指定された停止のいずれかです。 PR ジョブ制御 および 一時停止 の停止は、対象となるイベントではありません。 (スレッドは、停止シグナルのために 2 回停止することがあります。まず、シグナルがトレースされた場合は PR_SIGNALLED を表示し、スレッドがシグナルをクリアせずに実行中に設定されている場合は PR ジョブ制御 を表示します。) PCSTOP (停止) または PCDSTOP (停止) が、対象となるイベントのためではなく、停止されたスレッドに適用される場合、停止ディレクティブは、競合するメカニズムによってスレッドが再始動されたときに有効になります。そのとき、スレッドは、ユーザー・レベル・コードを実行する前に 要求済み 停止に入ります。
シグナルによってブロックされる制御メッセージの 書き込み 操作。これにより、例えば、対象となるイベントで決して停止しないプロセスまたはスレッドを待機しないように アラーム サブルーチンを設定することができます。 PCSTOP (停止) が割り込まれても、 書き込み サブルーチンがエラーを戻しても、スレッド停止ディレクティブは有効なままです。
カーネル・プロセス ( PR システム フラグで示される) は、ユーザー・レベルで実行されることはなく、停止することもできません。 /PROC ファイル・システムから見えるユーザー・レベルのアドレス・スペースはありません。 PCSTOP (停止)、 PCDSTOP (停止)、または PCWSTOP (P) をシステム・プロセスまたはそのスレッドのいずれかに適用すると、エラー エプシーが発生します。
- プCRUN
- 停止後にスレッドを再実行します。 オペランドは、オプションの追加アクションを記述する、 整数 オペランドに含まれるフラグのセットです。
プCRUN で許可されるフラグについて、以下で説明します。
- PRCSIG (R)
- 現行のシグナルがあれば、それをクリアします。 PCSSIG (システム管理グループ)を参照してください。
- PRCFAULT (優先順位)
- 現在の障害があれば、それをクリアします。 PCCFAULT (T)を参照してください。
- ステップ
- 単一のマシン・インストラクションを実行するようにスレッドに指示します。 命令の完了時に、トレース・トラップが発生します。 FLTTRACE (LTTRACE) がトレースされている場合、スレッドは停止します。それ以外の場合は、 SIGTRAP (シップ)が送信されます。 SIGTRAP (シップ) がトレースされているが、保留されていない場合、スレッドは停止します。 関心のあるイベントでスレッドが停止すると、命令が実行される前に停止が発生した場合でも、単一ステップ・ディレクティブは取り消されます。
- PRSABORT
- システム・コールの実行を中止するようにスレッドに指示します。 PCSENTRY (送信)、および _ 翻訳不要 _PCSEXITを参照してください。 これは、スレッドが PR_SYSENTRY 停止中であるか、または プリンとマークされている場合にのみ意味があります。
- 停止
- 実行を再開した後、できるだけ早く再度停止するようにスレッドに指示します。 PCSTOP (停止)を参照してください。 具体的には、スレッドが PR_SIGNALLED または よくある質問 (PR_FAULTED)で停止した場合、次の停止では 要求済みが表示され、他の停止が介在することはなく、スレッドはユーザー・レベルのコードを実行しません。
プCRUN は、スレッド制御ファイルに適用されると、特定のスレッドを実行可能にします。 対象のイベントで特定のスレッドが停止していない場合、操作は失敗し、エラー エプシー が返されます。
プロセス制御ファイルに適用されると、 /処理/PID/状況 ファイルで説明されているように、操作用に代表スレッドが選択されます。 対象となるイベントで代表スレッドが停止していない場合、操作は失敗し、エラー エプシー が返されます。 ステップ または 停止 が要求された場合、 プCRUN は、代表スレッドを実行可能にします。 それ以外の場合、選択されたスレッドは 要求済みとマークされます。 その結果、すべてのスレッドが 要求済み 停止状態になると、それらのスレッドはすべて実行可能になります。
プCRUN がスレッドを実行可能にすると、競合するメカニズムのためにスレッドが停止したままであっても、そのスレッドは対象のイベントで停止しなくなります。
- PCSTRACE (E)
- プロセス内でトレースされるシグナルのセットを定義します。 これらのシグナルの 1 つを受信すると、スレッドは停止します。 シグナルのセットは、制御メッセージに含まれているオペランド PR_SIGSET_T を使用して定義されます。 シグキル の受信はトレースできません。 シグキルを指定すると、スレッドはそれを無視します。
スレッドの保留シグナル・セットに含まれているシグナルがそのスレッドに送信されると、そのシグナルは受信されず、保留シグナル・セットから除去されるまで停止しません。 スレッド自体がそれを除去するか、または PCSHOLD (保留) または プCRUNの PRSHOLD (優先順位) オプションを使用して保留シグナル・セットを設定することによって除去します。
- PCSSIG (システム管理グループ)
- 特定のスレッドまたは代表スレッドの現行シグナルおよびそれに関連したシグナル情報を指定します。 この情報は、オペランド pr_siginfo64 構造体に従って設定されます。 指定されたシグナル番号がゼロの場合、現行のシグナルはクリアされます。 対象のイベントでスレッドが停止していない場合は、エラー エプシー が返されます。
この命令の構文は、 強制終了 サブルーチン、 pthread_kill サブルーチン、または PCKkillの構文とは異なります。 PCSSIG (システム管理グループ)を指定すると、シグナルは実行が再開された直後にスレッドに送信され (シグナルが保留されている場合でも)、シグナルがトレースされている場合でも、追加の PR_SIGNALLED 停止は介入しません。 現行シグナルを シグキル に設定すると、プロセスは即時に終了します。
- PCKkill
- プロセス制御ファイルに適用されると、 強制終了 サブルーチンの構文と同じ構文でシグナルがプロセスに送信されます。 スレッド制御ファイルに適用されると、 pthread_kill サブルーチンの構文と同じ構文で、シグナルがスレッドに送信されます。 シグナルは、メッセージに含まれているオペランド 整数 で指定されます。 シグキル を送信すると、プロセスまたはスレッドは即時に終了します。
- PPCUNKkill
- 保留シグナルのセットから除去するシグナルを指定します。 プロセス制御ファイルに適用された場合、シグナルはプロセスの保留シグナルから削除されます。 スレッド制御ファイルに適用すると、シグナルはスレッドの保留シグナルから削除されます。 現行のシグナル (存在する場合) は影響を受けません。 シグナルは、制御メッセージのオペランド 整数 で指定されます。 シグキル を削除しようとすると、エラー エインヴァルが発生します。
- PCSHOLD (保留)
- オペランド 署名 _t 構造体に従って、特定のスレッドまたは代表的なスレッドの保留シグナルのセットを設定します。 保留シグナルとは、スレッドに送信された場合に送達が遅延するシグナルのことです。 シグキル または SIGSTOP (停止) を保留することはできません。 指定すると、通知なしに無視されます。
- PCSフォールト
- プロセスでトレースされるハードウェア障害のセットを定義します。 これらの障害のいずれかが発生すると、スレッドは停止します。 このセットは、オペランド フラグ _t 構造体によって定義されます。 障害名は <sys/procfs.h> ファイルに定義され、以下を含みます。注: これらの一部は、すべてのプロセッサーで発生するわけではありません。ここで説明する障害のほかに、プロセッサー固有の障害が存在する可能性があります。
- FLTILL (充てん)
- 無効な命令
- FLTPRIV (フリPRIV)
- 特権命令
- FLTBPT (LTBPT)
- ブレークポイント・トラップ
- FLTTRACE (LTTRACE)
- トレース・トラップ
- FLTアクセス
- メモリー・アクセス障害 (バス・エラー)
- フラットバウンダリー
- メモリー境界違反
- FLTIOVF (ファイル・システム)
- integer overflow
- FLTIZDIV (航空機)
- 整数ゼロ除算
- FLTFPE (F)
- 浮動小数点例外
- FLTSTACK (F)
- リカバリー不能スタック障害
トレースされない場合、障害は通常、障害の原因となったスレッドにシグナルを通知することになります。 スレッドが障害で停止すると、 PCCFAULT (T) または プCRUNの PRCFAULT (優先順位) オプションによって障害がクリアされない限り、実行が再開されたときにシグナルがスレッドに通知されます。 /処理/PID/状況 または /処理/PID/LWP/ID/lwpstatus の 事前情報 フィールドは、送信されるシグナルを識別し、障害に関するマシン固有の情報を含んでいます。
- PCCFAULT (T)
- 現在の障害があれば、それをクリアすることを指定します。 関連付けられたシグナルは、指定されたスレッドまたは代表スレッドに送信されません。
- PCSENTRY (送信)
- 指定されたシステム・コールに入るときにプロセスのスレッドを停止するように指示します。 トレースされるシステム・コールのセットは、オペランド システム・セット 構造体を介して定義されます。 システム・コールへのエントリーがトレースされている場合、スレッドは、システムへのコールを開始した後、スレッドからシステム・コール引数が取り出される前に停止します。
スレッドがシステム・コールへの入り口で停止した場合 (PR_SYSENTRY)、または割り込み可能システム・コールでスリープした場合 (プリン が設定されている場合)、 プCRUN 制御メッセージで PRSABORT フラグを指定することにより、システム・コール出口に直接進むように指示されることがあります。 システム・コールからの出口がトレースされない限り、スレッドはエラー EINTR (E)を示すユーザー・レベルに戻ります。
- PCSEXIT
- 指定されたシステム・コールから出るときにプロセスのスレッドを停止するように指示します。 トレースされるシステム・コールのセットは、オペランド システム・セット 構造体を介して定義されます。 システム・コールからの出口がトレースされている場合、スレッドは、シグナルを検査してユーザー・レベルに戻る直前に、システム・コールの完了時に停止します。 この時点で、すべての戻り値がスレッドのレジスターに保管されています。
- PCSET、PCRESET、PCUNSET
- PC セット は、トレースされるプロセスに対して 1 つ以上の操作モードを設定します。 PCRESET (リセット) または PCUNSET (設定解除) は、これらのモードをリセットします。 設定またはリセットされるモードは、制御メッセージ内のオペランド 整数 のフラグによって指定されます。
- PR_FORK (fork 時に継承)
- 設定されている場合、プロセスのトレース・フラグは フォーク または vfork サブルーチンの子に継承されます。 リセットされると、子プロセスはすべてのトレース・フラグがクリアされた状態で開始します。
- PR_RLC (最後のクローズ時に実行)
- これが設定され、トレースされたプロセスまたはそのスレッドのいずれかを参照する最後の書き込み可能 /PROC ファイル記述子がクローズされると、プロセスのすべてのトレース・フラグがクリアされ、未解決の停止ディレクティブがすべて取り消され、対象となるイベントでスレッドが停止されると、それらのスレッドは プCRUN が適用されたかのように実行されます。 リセットされると、プロセスのトレース・フラグは保持され、スレッドは最後のクローズ時に実行されません。
- PR_KLC (最後のクローズでの強制終了)
- これが設定され、トレース対象プロセスまたはそのスレッドのいずれかを参照する最後の書き込み可能 /PROC ファイル記述子がクローズされると、プロセスは シグキルで終了します。
- PR_ASYNC (非同期停止)
- これを設定すると、1 つのスレッドによって対象となるイベントの停止がプロセス内の他のスレッドに直接影響することはありません。 リセットされ、 要求済み以外のインタレストのイベントでスレッドが停止すると、プロセス内の他のすべてのスレッドは停止するように指示されます。
上記のフラグ以外のフラグを指定するか、これらの操作をシステム・プロセスに適用すると、エラー エインヴァル が戻されます。 現行モードは、 /処理/PID/状況 ファイルの 前のフラグ フィールドで報告されます。
- PCSREG (P)
- オペランド 会衆 _t 構造体に従って、特定スレッドまたは代表スレッドの汎用レジスターおよび特殊レジスターを設定します。 変更の許容セットには、マシン固有の制約事項がある場合があります。 対象のイベントでスレッドが停止していない場合、またはカーネルでスレッドが停止している場合、 PCSREG (P) は失敗し、エラー エプシー を返します。
- PCSFPREG (先行)
- オペランド FPREGSET_T 構造体に従って、特定のスレッドまたは代表的なスレッドの浮動小数点レジスターを設定します。 システムが浮動小数点演算をサポートしていない (浮動小数点ハードウェアがなく、システムが浮動小数点マシン・インストラクションをエミュレートしていない) 場合、エラー エインヴァル が戻されます。 対象のイベントでスレッドが停止していない場合、またはカーネルでスレッドが停止している場合、 PCSFPREG (先行) は失敗し、エラー エプシー を返します。
- PCSVREG (P)
- オペランド Vregset_T 構造体に従って、特定のスレッドまたは代表的なスレッドのベクトル・レジスターを設定します。 エラー エインヴァル は、システムがベクトル操作をサポートしていない (ベクトル・ハードウェアがなく、システムがベクトル・マシン命令をエミュレートしていない) 場合、または代表スレッドがベクトル単位を参照していない場合に戻されます。 対象のイベントでスレッドが停止していない場合、またはカーネルでスレッドが停止している場合、 PCSVREG (P) は失敗し、エラー エプシー を返します。
- PCNICE (P)
- トレースされるプロセスの ナイス 優先順位は、オペランド 整数に含まれる量だけ増分されます。 この方法では、スーパーユーザーのみがプロセスの優先順位を上げることができますが、どのユーザーも優先順位を悪化させる可能性があります。 この操作は、タイム・シェアリング・スケジューリング・クラスのプロセスに適用される場合にのみ意味があります。
ファイル
| 項目 | 説明 |
|---|---|
| /PROC | ディレクトリー (プロセスのリスト) |
| /処理/PID | プロセス PID のディレクトリー |
| /処理/PID/状況 | プロセスの状況 PID |
| /処理/PID/CTL | プロセス PID の制御ファイル |
| /処理/PIDP/SSINFO | プロセス PID の ps 情報 |
| /処理/PID/形式 | プロセス PID のアドレス・スペース |
| /処理/PID/マップ | プロセス PID のマップ情報として |
| /処理/PID/クレッド | プロセス PID の資格情報情報 |
| /処理/PID/オブジェクト | プロセス PID のオブジェクトのディレクトリー |
| /処理/PID/ルート | プロセス PID の現行ルート・ディレクトリーへのリンク |
| /処理/PID/mmap | プロセス PID のメモリー・マップ・ファイル情報 |
| /処理/PID/sigact | プロセス PID のシグナル・アクション |
| /処理/PID/SYSENT | プロセス PID のシステム・コール情報 |
| /処理/PID/cwd -- | プロセス PID の現行作業ディレクトリーへのリンク |
| /処理/PID/F | プロセス PID のオープン・ファイル記述子のディレクトリー |
| /処理/PID/LWP/ID | スレッド ID のディレクトリー |
| プロセス/PID/LWP/ID/lwpstatus | スレッド ID の状況 |
| /処理/PID/LWP/ID/lwpctl | スレッド ID の制御ファイル |
| /処理/PID/LWP/ID/LWPSCINFO | スレッド ID の ps 情報 |
エラー・コード
ファイル・システム・アクセスに通常関連するエラーに加えて、その他のエラーが発生する可能性があります。
| エラー・コード | 説明 |
|---|---|
| ENOENT | トレースされたプロセスまたはスレッドは、オープンされた後に終了しました。 |
| EFAULT | 読み取り または 書き込み 要求が、無効な仮想アドレスで開始されました。 |
| EIO | 書き込み サブルーチンが、トレース・プロセス内の正しくないアドレスで試行されました。 |
| EBUSY | このエラーは、以下のいずれかの理由で戻されます。
|
| EPERM | 特権ユーザー以外のユーザーが、 PCNICE (P)を発行して、プロセスの優先順位を向上させようとしました。 |
| ENOSYS | /PROC ファイル・システム内のエントリーに対して、サポートされない操作 (作成、除去、リンク、またはリンク解除など) を行おうとしました。 |
| EINVAL | 無効な引数がシステム・コールに提供されました。 以下は、このエラーの原因となる可能性がある条件の一部ですが、すべてではありません。
|
| EINTR | PCSTOP (停止) または PCWSTOP (P)を介してトレースされたプロセスまたはスレッドが停止するのを待機している間に、制御プロセスがシグナルを受け取りました。 |
| EBADF | トレースされたプロセスが、setuid/setgid オブジェクト・ファイル、またはプロセスで読み取り不能なオブジェクト・ファイルに対して EXEC サブルーチンを実行しました。 プロセスまたはスレッド・ファイル・ディスクリプターに対するそれ以降のすべての操作 ( 閉じる サブルーチンを除く) では、このエラーが発生します。 |
セキュリティー
制御メッセージの影響は、トレースされるプロセスに関してアトミックであることが保証されます。
セキュリティー上の理由から (特権ユーザーを除く)、 /PROC ファイルの オープン サブルーチンは失敗します。ただし、呼び出し元の有効ユーザー ID と有効グループ ID の両方がトレース対象プロセスのものと一致し、プロセスのオブジェクト・ファイルが呼び出し元によって読み取り可能な場合を除きます。 セットアップ ID および セット ID プロセスに対応するファイルは、特権ユーザーのみが開くことができます。 特権ユーザーが保持している場合でも、トレース・プロセスが setuid/setgid オブジェクト・ファイルまたは読み取ることができないオブジェクト・ファイルに対して EXEC サブルーチンを実行すると、オープン・プロセスまたはスレッド・ファイル・ディスクリプターは無効になります。 無効なファイル・ディスクリプターに対して実行された操作 ( 閉じる サブルーチンを除く) は、 EBADF (B)で失敗します。 この場合、いずれかのトレース・フラグが設定されていて、プロセスまたはいずれかのスレッド・ファイルが書き込み用にオープンされていると、プロセスは停止するように指示され、その run-on-last-close フラグが設定されます ( PC セットを参照)。
この機能により、制御プロセス (必要なアクセス権を持つプロセス) は、プロセス・ファイルを再オープンして、新しい有効なファイル記述子を取得し、無効なファイル記述子を閉じて、続行することができます。 無効なファイル記述子をクローズするだけで、トレース・プロセスはトレース・フラグを設定せずに実行を再開します。 直前の オープン サブルーチンから残されたトレース・フラグを使用して書き込みのために現在オープンされていないプロセス、および setuid/setgid または読み取り不能オブジェクト・ファイルに対して EXEC サブルーチンを実行するプロセスは、停止されません。 ただし、そのプロセスのすべてのトレース・フラグがクリアされるわけではありません。