OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man2 / ptrace.2
index 10f00c7..bd9fea5 100644 (file)
 .\" Updated 2008-08-06, Akihiro MOTOKI, LDP v3.05
 .\" Updated 2009-04-13, Akihiro MOTOKI, LDP v3.20
 .\"
-.\"WORD:       child process           »Ò¥×¥í¥»¥¹
-.\"WORD:       parent process          ¿Æ¥×¥í¥»¥¹
-.\"WORD:       core image              ¥á¥â¥ê¡¦¥¤¥á¡¼¥¸
-.\"WORD:       break point             ¥Ö¥ì¡¼¥¯¡¦¥Ý¥¤¥ó¥È
-.\"WORD:       single step             ¥·¥ó¥°¥ë¡¦¥¹¥Æ¥Ã¥×¼Â¹Ô
-.\"WORD:       trap flag               ¥È¥é¥Ã¥×¡¦¥Õ¥é¥°
-.\"WORD:       attach                  Àܳ
-.\"WORD:       detach                  ʬΥ
-.\"WORD:       process ID              ¥×¥í¥»¥¹ID
+.\"WORD:       child process           å­\90ã\83\97ã\83­ã\82»ã\82¹
+.\"WORD:       parent process          è¦ªã\83\97ã\83­ã\82»ã\82¹
+.\"WORD:       core image              ã\83¡ã\83¢ã\83ªã\83»ã\82¤ã\83¡ã\83¼ã\82¸
+.\"WORD:       break point             ブレーク・ポイント
+.\"WORD:       single step             シングル・ステップ実行
+.\"WORD:       trap flag               ã\83\88ã\83©ã\83\83ã\83\97ã\83»ã\83\95ã\83©ã\82°
+.\"WORD:       attach                  接続
+.\"WORD:       detach                  分離
+.\"WORD:       process ID              ã\83\97ã\83­ã\82»ã\82¹ID
 .\"
 .TH PTRACE 2 2009-03-30 "Linux" "Linux Programmer's Manual"
-.SH Ì¾Á°
-ptrace \- ¥×¥í¥»¥¹¤Î¥È¥ì¡¼¥¹
-.SH ½ñ¼°
+.SH 名前
+ptrace \- ã\83\97ã\83­ã\82»ã\82¹ã\81®ã\83\88ã\83¬ã\83¼ã\82¹
+.SH 書式
 .nf
 .B #include <sys/ptrace.h>
 .sp
 .BI "long ptrace(enum __ptrace_request " request ", pid_t " pid ", "
 .BI "            void *" addr ", void *" data );
 .fi
-.SH ÀâÌÀ
+.SH 説明
 .BR ptrace ()
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢¿Æ¥×¥í¥»¥¹¤¬¡¢ÊÌ¤Î¥×¥í¥»¥¹¤Î¼Â¹Ô¤Î´Æ»ë/À©¸æ¤ò
-¹Ô¤Ã¤¿¤ê¡¢¥³¥¢¥¤¥á¡¼¥¸ (core image) ¤ä¥ì¥¸¥¹¥¿¤ÎÄ´ºº/Êѹ¹¤ò
-¹Ô¤Ã¤¿¤ê¤¹¤ë¼êÃʤòÄ󶡤¹¤ë¡£
+システムコールは、親プロセスが、別のプロセスの実行の監視/制御を
+行ったり、コアイメージ (core image) やレジスタの調査/変更を
+行ったりする手段を提供する。
 .BR ptrace ()
-¤Ï¡¢¼ç¤Ë¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤Ë¤è¤ë¥Ç¥Ð¥Ã¥°¤ä¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î¥È¥ì¡¼¥¹¤ò
-¼ÂÁõ¤¹¤ë¤Î¤ËÍѤ¤¤é¤ì¤ë¡£
+は、主にブレークポイントによるデバッグやシステムコールのトレースを
+実装するのに用いられる。
 .LP
-¥È¥ì¡¼¥¹¤ò³«»Ï¤¹¤ë¤Ë¤Ï¡¢¤Þ¤º¿Æ¥×¥í¥»¥¹¤Ç
+トレースを開始するには、まず親プロセスで
 .BR fork (2)
-¤ò¸Æ¤Ó½Ð¤¹¡£À¸À®¤µ¤ì¤¿»Ò¥×¥í¥»¥¹¤Ç
+を呼び出す。生成された子プロセスで
 .B PTRACE_TRACEME
-¤ò¹Ô¤¤¡¢Â³¤¤¤Æ (ŵ·¿Åª¤Ë¤Ï)
+を行い、続いて (典型的には)
 .BR exec (3)
-¤ò¹Ô¤Ê¤¦¡£
-Ê̤ÎÊýË¡¤È¤·¤Æ¤Ï¡¢
-¿Æ¥×¥í¥»¥¹¤¬´û¸¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ
+を行なう。
+別の方法としては、
+親プロセスが既存のプロセスに対して
 .B PTRACE_ATTACH
-¤ò»ÈÍѤ·¡¢¥È¥ì¡¼¥¹¤ò³«»Ï¤¹¤ë¡£
+を使用し、トレースを開始する。
 .LP
-¥È¥ì¡¼¥¹¤Î¼Â¹ÔÃæ¡¢»Ò¥×¥í¥»¥¹¤Ï¥·¥°¥Ê¥ë¤¬ÇÛÁ÷¤µ¤ì¤ë¤¿¤Ó¤Ë¡¢
-¤¿¤È¤¨¤½¤Î¥·¥°¥Ê¥ë¤¬Ìµ»ë¤¹¤Ù¤­¤â¤Î¤Ç¤¢¤Ã¤Æ¤âÄä»ß¤¹¤ë
+トレースの実行中、子プロセスはシグナルが配送されるたびに、
+たとえそのシグナルが無視すべきものであっても停止する
 .RB ( SIGKILL
-¤ÏÎã³°¤Ç¡¢Ä̾ï¤É¤ª¤ê¤Î¸ú²Ì¤ò¤â¤¿¤é¤¹)¡£
-¿Æ¥×¥í¥»¥¹¤Ë¤Ï¼¡¤Î
+は例外で、通常どおりの効果をもたらす)。
+親プロセスには次の
 .BR wait (2)
-¤ÇÄÌÃΤµ¤ì¡¢Ää»ß¤·¤Æ¤¤¤ë´Ö¤Ë»Ò¥×¥í¥»¥¹¤òÄ´¤Ù¤¿¤ê½¤Àµ¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-¤½¤·¤Æ¿Æ¥×¥í¥»¥¹¤Ï»Ò¥×¥í¥»¥¹¤Î¼Â¹Ô¤òºÆ³«¤µ¤»¤ë¤¬¡¢ÇÛÁ÷¤µ¤ì¤¿
-¥·¥°¥Ê¥ë¤ò̵»ë¤¹¤ë¤³¤È¤â¤Ç¤­¤ë (¤¢¤ë¤¤¤ÏÂå¤ï¤ê¤ËÊ̤Υ·¥°¥Ê¥ë¤ò
-ÇÛÁ÷¤¹¤ë¤³¤È¤â¤Ç¤­¤ë) ¡£
+で通知され、停止している間に子プロセスを調べたり修正したりすることができる。
+そして親プロセスは子プロセスの実行を再開させるが、配送された
+シグナルを無視することもできる (あるいは代わりに別のシグナルを
+配送することもできる) 。
 .LP
-¿Æ¥×¥í¥»¥¹¤¬¥È¥ì¡¼¥¹¤ò½ªÎ»¤¹¤ëºÝ¤Ë¤Ï¡¢
+親プロセスがトレースを終了する際には、
 .B PTRACE_KILL
-¤ò»ÈÍѤ·¤Æ»Ò¥×¥í¥»¥¹¤ò½ªÎ»¤µ¤»¤ë¤³¤È¤â¤Ç¤­¤ë¤·¡¢
+を使用して子プロセスを終了させることもできるし、
 .B PTRACE_DETACH
-¤òÍѤ¤¤ÆÄ̾ï¤Î¥È¥ì¡¼¥¹¤Ê¤·¤Î¥â¡¼¥É¤Ë¤·¤Æ¡¢
-¼Â¹Ô¤ò·Ñ³¤µ¤»¤ë¤³¤È¤â¤Ç¤­¤ë¡£
+を用いて通常のトレースなしのモードにして、
+実行を継続させることもできる。
 .LP
-\fIrequest\fP ¤ÎÃͤ¬¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÆ°ºî¤ò·èÄꤹ¤ë:
+\fIrequest\fP の値がこのシステムコールの動作を決定する:
 .TP
 .B PTRACE_TRACEME
-¤³¤Î¥×¥í¥»¥¹¤¬¿Æ¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¥È¥ì¡¼¥¹¤µ¤ì¤ë¤³¤È¤òɽ¤¹¡£
-¤³¤Î¥×¥í¥»¥¹¤Ë
+このプロセスが親プロセスによってトレースされることを表す。
+このプロセスに
 .RB ( SIGKILL
-°Ê³°¤Î) ¥·¥°¥Ê¥ë¤¬ÇÛÁ÷¤µ¤ì¤ë¤È¡¢
-¥×¥í¥»¥¹¤ÏÄä»ß¤·¡¢¿Æ¥×¥í¥»¥¹¤Ë
+以外の) シグナルが配送されると、
+プロセスは停止し、親プロセスに
 .BR wait (2)
-¤òÄ̤¸¤ÆÄÌÃΤµ¤ì¤ë¡£
-¤Þ¤¿¡¢¤³¤ì°Ê¹ß¤Ï¤³¤Î¥×¥í¥»¥¹¤¬
+を通じて通知される。
+また、これ以降はこのプロセスが
 .BR execve (2)
-¤ò¸Æ¤Ó½Ð¤¹ÅÙ¤Ë
+を呼び出す度に
 .B SIGTRAP
-¤¬Á÷¿®¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£
-¤³¤ì¤Ë¤è¤Ã¤Æ¡¢¿Æ¥×¥í¥»¥¹¤Ï
-¿·¤·¤¤¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤ò³«»Ï¤¹¤ëÁ°¤ËÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-¿Æ¥×¥í¥»¥¹¤¬¼«¥×¥í¥»¥¹¤ò¥È¥ì¡¼¥¹¤¹¤ë¤Ä¤â¤ê¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢
-¤ª¤½¤é¤¯¤³¤Î¥×¥í¥»¥¹¤ÏËÜÍ×µá¤ò¹Ô¤¦¤Ù¤­¤Ç¤Ï¤Ê¤¤¤À¤í¤¦¡£
-(\fIpid\fP, \fIaddr\fP, \fIdata\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+が送信されるようになる。
+これによって、親プロセスは
+新しいプログラムが実行を開始する前に制御することができる。
+親プロセスが自プロセスをトレースするつもりがない場合には、
+おそらくこのプロセスは本要求を行うべきではないだろう。
+(\fIpid\fP, \fIaddr\fP, \fIdata\fP は無視される。)
 .LP
-¾åµ­¤ÎÍ×µá¤Ï»Ò¥×¥í¥»¥¹¤À¤±¤¬¹Ô¤Ê¤¦¤â¤Î¤Ç¤¢¤ë¡£
-»Ä¤ê¤Ï¿Æ¥×¥í¥»¥¹¤À¤±¤¬¹Ô¤Ê¤¦¤â¤Î¤Ç¤¢¤ë¡£
-°Ê²¼¤ÎÍ×µá¤Ç¤Ï¡¢\fIpid\fP ¤ÇÁàºî¤ÎÂоݤȤʤë
-»Ò¥×¥í¥»¥¹¤ò»ØÄꤹ¤ë¡£
+上記の要求は子プロセスだけが行なうものである。
+残りは親プロセスだけが行なうものである。
+以下の要求では、\fIpid\fP で操作の対象となる
+子プロセスを指定する。
 .B PTRACE_KILL
-¤ò½ü¤­¡¢Í×µá¤ò¹Ô¤Ê¤¦¤¿¤á¤Ë¤Ï
-»Ò¥×¥í¥»¥¹¤ÏÄä»ß¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+を除き、要求を行なうためには
+子プロセスは停止していなければならない。
 .TP
 .BR PTRACE_PEEKTEXT ", " PTRACE_PEEKDATA
-»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
+子プロセスのメモリの
 .I addr
-¤Î°ÌÃÖ¤«¤é 1 ¥ï¡¼¥É¤òÆɤ߽Ф¹¡£Æɤ߽Ф·¤¿¥ï¡¼¥É¤Ï
+の位置から 1 ワードを読み出す。読み出したワードは
 .BR ptrace ()
-¤ÎÊÖ¤êÃͤȤ·¤ÆÊÖ¤µ¤ì¤ë¡£ Linux ¤Ç¤Ï¥Æ¥­¥¹¥È (text) ¤È¥Ç¡¼¥¿ (data) ¤Ç
-Ʊ¤¸¥¢¥É¥ì¥¹¶õ´Ö¤ò»ÈÍѤ¹¤ë¤¿¤á¡¢¤³¤Î 2 ¤Ä¤ÎÍ×µá¤Ï¸½ºß¤Î¤È¤³¤í
-Ʊ¤¸¤â¤Î¤Ç¤¢¤ë¡£ (°ú¤­¿ô \fIdata\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+の返り値として返される。 Linux ではテキスト (text) とデータ (data) で
+同じアドレス空間を使用するため、この 2 つの要求は現在のところ
+同じものである。 (引き数 \fIdata\fP は無視される。)
 .TP
 .B PTRACE_PEEKUSER
 .\" PTRACE_PEEKUSR in kernel source, but glibc uses PTRACE_PEEKUSER,
 .\" and that is the name that seems common on other systems.
-»Ò¥×¥í¥»¥¹¤Î USER Îΰè¤Î¥ª¥Õ¥»¥Ã¥È
+子プロセスの USER 領域のオフセット
 .I addr
-¤Î°ÌÃÖ¤«¤é 1 ¥ï¡¼¥É¤òÆɤ߹þ¤à¡£USER Îΰè¤Ë¤Ï¤½¤Î¥×¥í¥»¥¹¤Î
-¥ì¥¸¥¹¥¿ (registers) ¤Ê¤É¤Î¾ðÊó¤¬ÊÝ»ý¤µ¤ì¤Æ¤¤¤ë
-(\fI<sys/user.h>\fP ¤ò»²¾È)¡£Æɤ߹þ¤ó¤À¥ï¡¼¥É¤Ï
+の位置から 1 ワードを読み込む。USER 領域にはそのプロセスの
+レジスタ (registers) などの情報が保持されている
+(\fI<sys/user.h>\fP を参照)。読み込んだワードは
 .BR ptrace ()
-¥³¡¼¥ë¤Î·ë²Ì¤È¤·¤ÆÊÖ¤µ¤ì¤ë¡£
-¤¿¤¤¤Æ¤¤¤Ï¥ª¥Õ¥»¥Ã¥È¤Ï¥ï¡¼¥É¶­³¦¤Ë¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤¬¡¢
-¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¤è¤Ã¤Æ¤Ï¤½¤ÎɬÍפϤʤ¤¡£
-¡ÖÃí°Õ¡×¤ÎÀá¤ò»²¾È¡£
-(\fIdata\fP ¤Ï̵»ë¤µ¤ì¤ë¡£ )
+コールの結果として返される。
+たいていはオフセットはワード境界になければならないが、
+アーキテクチャによってはその必要はない。
+「注意」の節を参照。
+(\fIdata\fP は無視される。 )
 .TP
 .BR PTRACE_POKETEXT ", " PTRACE_POKEDATA
-¥ï¡¼¥É
+ワード
 .I data
-¤ò»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
+を子プロセスのメモリの
 .I addr
-¤Î°ÌÃ֤إ³¥Ô¡¼¤¹¤ë¡£¾å¤ÈƱÍͤˡ¢¸½ºß¤Î¤È¤³¤íÆó¤Ä¤Î
-Í×µá¤ÏƱ¤¸¤â¤Î¤Ç¤¢¤ë¡£
+の位置へコピーする。上と同様に、現在のところ二つの
+要求は同じものである。
 .TP
 .B PTRACE_POKEUSER
 .\" PTRACE_POKEUSR in kernel source, but glibc uses PTRACE_POKEUSER,
 .\" and that is the name that seems common on other systems.
-¥ï¡¼¥É
+ワード
 .I data
-¤ò»Ò¥×¥í¥»¥¹¤Î USER Îΰè¤Î¥ª¥Õ¥»¥Ã¥È
+を子プロセスの USER 領域のオフセット
 .I addr
-¤Î°ÌÃ֤˥³¥Ô¡¼¤¹¤ë¡£
-¾å¤ÈƱÍͤˡ¢Ä̾¥ª¥Õ¥»¥Ã¥È¤Ï¥ï¡¼¥É¶­³¦¤Ë¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-¥«¡¼¥Í¥ë¤Î´°Á´À­ (integrity) ¤ò°Ý»ý¤¹¤ë¤¿¤á¡¢
-Êѹ¹ÆâÍƤˤè¤Ã¤Æ¤Ï USER Îΰè¤ÎÊѹ¹¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¡£
+の位置にコピーする。
+上と同様に、通常、オフセットはワード境界になければならない。
+カーネルの完全性 (integrity) を維持するため、
+変更内容によっては USER 領域の変更は禁止されている。
 .TP
 .BR PTRACE_GETREGS ", " PTRACE_GETFPREGS
-¤½¤ì¤¾¤ì¡¢»Ò¥×¥í¥»¥¹¤ÎÈÆÍѥ쥸¥¹¥¿¡¢ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤ò¿Æ¥×¥í¥»¥¹¤Î
-\fIdata\fP ¤Î°ÌÃ֤˥³¥Ô¡¼¤¹¤ë¡£¤³¤Î data ¤Î½ñ¼°¤Ë´Ø¤·¤Æ¤Ï
-\fI<sys/user.h>\fP ¤ò»²¾È¤¹¤ë¤³¤È¡£(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+それぞれ、子プロセスの汎用レジスタ、浮動小数点レジスタを親プロセスの
+\fIdata\fP の位置にコピーする。この data の書式に関しては
+\fI<sys/user.h>\fP を参照すること。(\fIaddr\fP は無視される。)
 .TP
-.BR PTRACE_GETSIGINFO " (Linux 2.3.99-pre6 °Ê¹ß)"
-Ää»ß¤Î¸¶°ø¤È¤Ê¤Ã¤¿¥·¥°¥Ê¥ë¤Ë´Ø¤¹¤ë¾ðÊó¤ò¼èÆÀ¤¹¤ë¡£
-\fIsiginfo_t\fP ¹½Â¤ÂÎ
+.BR PTRACE_GETSIGINFO " (Linux 2.3.99-pre6 以降)"
+停止の原因となったシグナルに関する情報を取得する。
+\fIsiginfo_t\fP 構造体
 .RB ( sigaction (2)
-»²¾È) ¤ò»Ò¥×¥í¥»¥¹¤«¤é¿Æ¥×¥í¥»¥¹¤Î \fIdata\fP ¤Î°ÌÃ֤˥³¥Ô¡¼¤¹¤ë¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+参照) を子プロセスから親プロセスの \fIdata\fP の位置にコピーする。
+(\fIaddr\fP は無視される。)
 .TP
 .BR PTRACE_SETREGS ", " PTRACE_SETFPREGS
-¤½¤ì¤¾¤ì¡¢»Ò¥×¥í¥»¥¹¤ÎÈÆÍѥ쥸¥¹¥¿¡¢ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤Ë
-¿Æ¥×¥í¥»¥¹¤Î \fIdate\fP ¤Î°ÌÃÖ¤«¤é¥³¥Ô¡¼¤¹¤ë¡£
+それぞれ、子プロセスの汎用レジスタ、浮動小数点レジスタに
+親プロセスの \fIdate\fP の位置からコピーする。
 .B PTRACE_POKEUSER
-¤ÈƱÍͤˡ¢ÈÆÍѥ쥸¥¹¥¿¤Ë¤è¤Ã¤Æ¤Ï
-Êѹ¹¤¬¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ë¡£ (\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+と同様に、汎用レジスタによっては
+変更が禁止されている場合がある。 (\fIaddr\fP は無視される。)
 .TP
-.BR PTRACE_SETSIGINFO " (Linux 2.3.99-pre6 °Ê¹ß)"
-¥·¥°¥Ê¥ë¾ðÊó¤òÀßÄꤹ¤ë¡£
-\fIsiginfo_t\fP ¹½Â¤ÂΤò¿Æ¥×¥í¥»¥¹¤Î¥Ç¡¼¥¿ \fIdata\fP ¤Î°ÌÃÖ¤«¤é
-»Ò¥×¥í¥»¥¹¤Ë¥³¥Ô¡¼¤¹¤ë¡£
-¤³¤Î½èÍý¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ï¡¢»Ò¥×¥í¥»¥¹¤ËÄ̾ï¤ÏÇÛÁ÷¤µ¤ì¤ë¤Ï¤º¤Ç
-¥È¥ì¡¼¥µ¤ËÊ᪤µ¤ì¤¿¥·¥°¥Ê¥ë¤Ë¤Ä¤¤¤Æ¤À¤±¤Ç¤¢¤ë¡£
-¤³¤ì¤é¤ÎÄ̾ï¤Î¥·¥°¥Ê¥ë¤È
+.BR PTRACE_SETSIGINFO " (Linux 2.3.99-pre6 以降)"
+シグナル情報を設定する。
+\fIsiginfo_t\fP 構造体を親プロセスのデータ \fIdata\fP の位置から
+子プロセスにコピーする。
+この処理を行うことができるのは、子プロセスに通常は配送されるはずで
+トレーサに捕捉されたシグナルについてだけである。
+これらの通常のシグナルと
 .BR ptrace ()
-¼«¿È¤¬È¯À¸¤¹¤ë¥·¥°¥Ê¥ë¤ò¸«Ê¬¤±¤ë¤Î¤ÏÆñ¤·¤¤¤«¤â¤·¤ì¤Ê¤¤¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+自身が発生するシグナルを見分けるのは難しいかもしれない。
+(\fIaddr\fP は無視される。)
 .TP
-.BR PTRACE_SETOPTIONS " (Linux 2.4.6 °Ê¹ß; ¥Ð¥°¤Î¾Ï¤Ë¤¢¤ë·Ù¹ð¤â»²¾È)"
-¿Æ¥×¥í¥»¥¹¤Î \fIdata\fP ¤Ë´ð¤Å¤¤¤Æ ptrace ¤Î¥ª¥×¥·¥ç¥ó¤òÀßÄꤹ¤ë
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë)¡£
-\fIdata\fP ¤Ï¥ª¥×¥·¥ç¥ó¤Î¥Ó¥Ã¥È¥Þ¥¹¥¯¤È¤·¤Æ²ò¼á¤µ¤ì¡¢
-¥ª¥×¥·¥ç¥ó¤Ë¤Ï°Ê²¼¤Î¥Õ¥é¥°¤ò»ØÄê¤Ç¤­¤ë:
+.BR PTRACE_SETOPTIONS " (Linux 2.4.6 以降; バグの章にある警告も参照)"
+親プロセスの \fIdata\fP に基づいて ptrace のオプションを設定する
+(\fIaddr\fP は無視される)。
+\fIdata\fP はオプションのビットマスクとして解釈され、
+オプションには以下のフラグを指定できる:
 .RS
 .TP
-.BR PTRACE_O_TRACESYSGOOD " (Linux 2.4.6 °Ê¹ß)"
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î¥È¥é¥Ã¥×¤¬ÇÛÁ÷¤µ¤ì¤¿¤È¤­¤Ë¡¢¥·¥°¥Ê¥ëÈÖ¹æ¤Î¥Ó¥Ã¥È 7
-¤òÀßÄꤹ¤ë (¤¹¤Ê¤ï¤Á¡¢\fISIGTRAP | 0x80\fP ¤òÇÛÁ÷¤¹¤ë)¡£
-¤³¤ì¤Ë¤è¤ê¡¢¥È¥ì¡¼¥µ¤¬Ä̾ï¤Î¥È¥é¥Ã¥×¤È¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ë¤è¤ë¥È¥é¥Ã¥×¤ò
-¶èÊ̤·¤ä¤¹¤¯¤Ê¤ë¡£
+.BR PTRACE_O_TRACESYSGOOD " (Linux 2.4.6 以降)"
+システムコールのトラップが配送されたときに、シグナル番号のビット 7
+を設定する (すなわち、\fISIGTRAP | 0x80\fP を配送する)。
+これにより、トレーサが通常のトラップとシステムコールによるトラップを
+区別しやすくなる。
 .RB ( PTRACE_O_TRACESYSGOOD
-¤Ï¤É¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤âÆ°ºî¤·¤Ê¤¤²ÄǽÀ­¤¬¤¢¤ë¡£)
+はどのアーキテクチャでも動作しない可能性がある。)
 .TP
-.BR PTRACE_O_TRACEFORK " (Linux 2.5.46 °Ê¹ß)"
-¼¡¤Î
+.BR PTRACE_O_TRACEFORK " (Linux 2.5.46 以降)"
+次の
 .BR fork (2)
-¸Æ¤Ó½Ð¤·»þ¤Ë \fISIGTRAP | PTRACE_EVENT_FORK\ <<\ 8\fP ¤Ç
-»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¡¢
-¿·¤¿¤Ë fork ¤µ¤ì¤¿¥×¥í¥»¥¹¤Î¥È¥ì¡¼¥¹¤ò¼«Æ°Åª¤Ë³«»Ï¤·¡¢
+呼び出し時に \fISIGTRAP | PTRACE_EVENT_FORK\ <<\ 8\fP で
+子プロセスの動作を停止させ、
+新たに fork されたプロセスのトレースを自動的に開始し、
 .B SIGSTOP
-¤Ç¤½¤Î¥×¥í¥»¥¹¤Î¼Â¹Ô¤ò³«»Ï¤¹¤ë¡£
-¿·¤·¤¤¥×¥í¥»¥¹¤Î PID ¤Ï
+でそのプロセスの実行を開始する。
+新しいプロセスの PID は
 .B PTRACE_GETEVENTMSG
-¤Ç¼èÆÀ¤Ç¤­¤ë¡£
+で取得できる。
 .TP
-.BR PTRACE_O_TRACEVFORK " (Linux 2.5.46 °Ê¹ß)"
-¼¡¤Î
+.BR PTRACE_O_TRACEVFORK " (Linux 2.5.46 以降)"
+次の
 .BR vfork (2)
-¸Æ¤Ó½Ð¤·»þ¤Ë \fISIGTRAP | PTRACE_EVENT_VFORK\ <<\ 8\fP ¤Ç
-»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¡¢
-¿·¤¿¤Ë vfork ¤µ¤ì¤¿¥×¥í¥»¥¹¤Î¥È¥ì¡¼¥¹¤ò¼«Æ°Åª¤Ë³«»Ï¤·¡¢
+呼び出し時に \fISIGTRAP | PTRACE_EVENT_VFORK\ <<\ 8\fP で
+子プロセスの動作を停止させ、
+新たに vfork されたプロセスのトレースを自動的に開始し、
 .B SIGSTOP
-¤Ç¤½¤Î¥×¥í¥»¥¹¤Î¼Â¹Ô¤ò³«»Ï¤¹¤ë¡£
-¿·¤·¤¤¥×¥í¥»¥¹¤Î PID ¤Ï
+でそのプロセスの実行を開始する。
+新しいプロセスの PID は
 .B PTRACE_GETEVENTMSG
-¤Ç¼èÆÀ¤Ç¤­¤ë¡£
+で取得できる。
 .TP
-.BR PTRACE_O_TRACECLONE " (Linux 2.5.46 °Ê¹ß)"
-¼¡¤Î
+.BR PTRACE_O_TRACECLONE " (Linux 2.5.46 以降)"
+次の
 .BR clone (2)
-¸Æ¤Ó½Ð¤·»þ¤Ë \fISIGTRAP | PTRACE_EVENT_CLONE\ << \8\fP ¤Ç
-»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¡¢
-¿·¤¿¤Ë clone ¤ÇºîÀ®¤µ¤ì¤¿¥×¥í¥»¥¹¤Î¥È¥ì¡¼¥¹¤ò¼«Æ°Åª¤Ë³«»Ï¤·¡¢
+呼び出し時に \fISIGTRAP | PTRACE_EVENT_CLONE\ << \8\fP で
+子プロセスの動作を停止させ、
+新たに clone で作成されたプロセスのトレースを自動的に開始し、
 .B SIGSTOP
-¤Ç¥×¥í¥»¥¹¤Î¼Â¹Ô¤ò³«»Ï¤¹¤ë¡£
-¿·¤·¤¤¥×¥í¥»¥¹¤Î PID ¤Ï
+でプロセスの実行を開始する。
+新しいプロセスの PID は
 .B PTRACE_GETEVENTMSG
-¤Ç¼èÆÀ¤Ç¤­¤ë¡£
-¤³¤Î¥ª¥×¥·¥ç¥ó¤ÇÁ´¤Æ¤Î
+で取得できる。
+このオプションで全ての
 .BR clone (2)
-¥³¡¼¥ë¤òÊá¤Þ¤¨¤é¤ì¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¡£
-»Ò¥×¥í¥»¥¹¤¬
+コールを捕まえられるわけではない。
+子プロセスが
 .B CLONE_VFORK
-¥Õ¥é¥°ÉÕ¤­¤Ç
+フラグ付きで
 .BR clone (2)
-¤ò¸Æ¤Ó½Ð¤·¤¿¾ì¹ç¡¢
+を呼び出した場合、
 .B PTRACE_O_TRACEVFORK
-¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ì¤ÐÂå¤ï¤ê¤Ë
+が設定されていれば代わりに
 .B PTRACE_EVENT_VFORK
-¤¬ÇÛÁ÷¤µ¤ì¤ë¡£
-¤Þ¤¿¡¢»Ò¥×¥í¥»¥¹¤¬½ªÎ»¥·¥°¥Ê¥ë¤ò
+が配送される。
+また、子プロセスが終了シグナルを
 .B SIGCHLD
-¤ËÀßÄꤷ¤Æ
+に設定して
 .BR clone (2)
-¤ò¸Æ¤Ó½Ð¤·¤¿¾ì¹ç¤Ï¡¢
+を呼び出した場合は、
 .B PTRACE_O_TRACEFORK
-¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ì¤Ð
+が設定されていれば
 .B PTRACE_EVENT_FORK
-¤¬ÇÛÁ÷¤µ¤ì¤ë¡£
+が配送される。
 .TP
-.BR PTRACE_O_TRACEEXEC " (Linux 2.5.46 °Ê¹ß)"
-¼¡¤Î
+.BR PTRACE_O_TRACEEXEC " (Linux 2.5.46 以降)"
+次の
 .BR execve (2)
-¸Æ¤Ó½Ð¤·»þ¤Ë
+呼び出し時に
 \fISIGTRAP | PTRACE_EVENT_EXEC\ <<\ 8\fP
-¤Ç»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¤ë¡£
+で子プロセスの動作を停止させる。
 .TP
-.BR PTRACE_O_TRACEVFORKDONE " (Linux 2.5.60 °Ê¹ß)"
-¼¡¤Î
+.BR PTRACE_O_TRACEVFORKDONE " (Linux 2.5.60 以降)"
+次の
 .BR vfork (2)
-¸Æ¤Ó½Ð¤·»þ¤Ë
+呼び出し時に
 \fISIGTRAP | PTRACE_EVENT_VFORK_DONE\ <<\ 8\fP
-¤Ç»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¤ë¡£
+で子プロセスの動作を停止させる。
 .TP
-.BR PTRACE_O_TRACEEXIT " (Linux 2.5.60 °Ê¹ß)"
-½ªÎ» (exit) »þ¤Ë \fISIGTRAP | PTRACE_EVENT_EXIT\ <<\ 8\fP
-¤Ç»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¤ë¡£»Ò¥×¥í¥»¥¹¤Î½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤Ï
+.BR PTRACE_O_TRACEEXIT " (Linux 2.5.60 以降)"
+終了 (exit) 時に \fISIGTRAP | PTRACE_EVENT_EXIT\ <<\ 8\fP
+で子プロセスの動作を停止させる。子プロセスの終了ステータスは
 .B PTRACE_GETEVENTMSG
-¤Ç¼èÆÀ¤Ç¤­¤ë¡£
-¤³¤ÎÄä»ß¤Ï¥ì¥¸¥¹¥¿¤¬¤Þ¤À»²¾È²Äǽ¤Ç¤¢¤ë¥×¥í¥»¥¹½ªÎ»½èÍý¤Î½é´ü¤Ë¹Ô¤ï¤ì¡¢
-¥È¥ì¡¼¥µ¤Ï¤É¤³¤Ç½ªÎ»¤¬È¯À¸¤·¤¿¤«¤òÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£
-Ä̾ï¤Î½ªÎ»ÄÌÃΠ(exit notification) ¤Ï¥×¥í¥»¥¹¤Î½ªÎ»½èÍý¤¬´°Î»¤·¤¿¸å¤Ë
-¹Ô¤ï¤ì¤ë¡£¥³¥ó¥Æ¥­¥¹¥È¤ò»²¾È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤ë¤Ë¤â´Ø¤ï¤é¤º¡¢
-¥È¥ì¡¼¥µ¤Ï¤³¤Î»þÅÀ¤«¤é½ªÎ»¤ò»ß¤á¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£
+で取得できる。
+この停止はレジスタがまだ参照可能であるプロセス終了処理の初期に行われ、
+トレーサはどこで終了が発生したかを知ることができる。
+通常の終了通知 (exit notification) はプロセスの終了処理が完了した後に
+行われる。コンテキストを参照することはできるにも関わらず、
+トレーサはこの時点から終了を止めることはできない。
 .RE
 .TP
-.BR PTRACE_GETEVENTMSG " (Linux 2.5.46 °Ê¹ß)"
-ȯÀ¸¤·¤¿¤Ð¤«¤ê¤Î ptrace ¥¤¥Ù¥ó¥È¤Ë´Ø¤¹¤ë¥á¥Ã¥»¡¼¥¸¤ò
+.BR PTRACE_GETEVENTMSG " (Linux 2.5.46 以降)"
+発生したばかりの ptrace イベントに関するメッセージを
 .RI ( "unsigned long"
-·¿¤Ç) ¼èÆÀ¤¹¤ë¡£
-¼èÆÀ¤·¤¿¥á¥Ã¥»¡¼¥¸¤Ï¿Æ¥×¥í¥»¥¹¤Î \fIdata\fP ¤Î°ÌÃ֤˳ÊǼ¤µ¤ì¤ë¡£
-ÆÀ¤é¤ì¤ëÆâÍƤϡ¢
+型で) 取得する。
+取得したメッセージは親プロセスの \fIdata\fP の位置に格納される。
+得られる内容は、
 .B PTRACE_EVENT_EXIT
-¤Î¾ì¹ç¤Ï»Ò¥×¥í¥»¥¹¤Î½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤Ç¤¢¤ê¡¢
+の場合は子プロセスの終了ステータスであり、
 .BR PTRACE_EVENT_FORK ,
 .BR PTRACE_EVENT_VFORK ,
 .B PTRACE_EVENT_CLONE
-¤Î¾ì¹ç¤Ï¿·¤·¤¤¥×¥í¥»¥¹¤Î PID ¤Ç¤¢¤ë¡£
-Linux 2.6.18 °Ê¹ß¤Ç¤Ï¡¢¿·¤·¤¤¥×¥í¥»¥¹¤Î PID ¤Ï
+の場合は新しいプロセスの PID である。
+Linux 2.6.18 以降では、新しいプロセスの PID は
 .B PTRACE_EVENT_VFORK_DONE
-¤ÇÆþ¼ê¤Ç¤­¤ë¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+で入手できる。
+(\fIaddr\fP は無視される。)
 .TP
 .B PTRACE_CONT
-Ää»ß¤·¤¿»Ò¥×¥í¥»¥¹¤Î¼Â¹Ô¤òºÆ³«¤µ¤»¤ë¡£
-\fIdata\fP ¤¬¥¼¥í¤Ç¤Ê¤¯¡¢
+停止した子プロセスの実行を再開させる。
+\fIdata\fP がゼロでなく、
 .B SIGSTOP
-¤Ç¤â¤Ê¤±¤ì¤Ð¡¢
-»Ò¥×¥í¥»¥¹¤ËÇÛÁ÷¤µ¤ì¤ë¥·¥°¥Ê¥ë¤È²ò¼á¤µ¤ì¤ë¡£
-¥¼¥í¤ä
+でもなければ、
+子プロセスに配送されるシグナルと解釈される。
+ゼロや
 .B SIGSTOP
-¤Î¾ì¹ç¤Ï¥·¥°¥Ê¥ë¤ÏÇÛÁ÷¤µ¤ì¤Ê¤¤¡£
-¤³¤ì¤ò»È¤¦¤È¡¢Î㤨¤Ð¡¢¿Æ¥×¥í¥»¥¹¤Ï
-»Ò¥×¥í¥»¥¹¤ËÁ÷¤é¤ì¤¿¥·¥°¥Ê¥ë¤ò¼ÂºÝ¤ËÇÛÁ÷¤¹¤ë¤«¤É¤¦¤«¤ò
-À©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+の場合はシグナルは配送されない。
+これを使うと、例えば、親プロセスは
+子プロセスに送られたシグナルを実際に配送するかどうかを
+制御することができる。(\fIaddr\fP は無視される。)
 .TP
 .BR PTRACE_SYSCALL ", " PTRACE_SINGLESTEP
 .B PTRACE_CONT
-¤ÈƱÍͤËÄä»ß¤·¤¿»Ò¥×¥í¥»¥¹¤òºÆ³«¤¹¤ë¡£¤¿¤À¤·¡¢
+と同様に停止した子プロセスを再開する。ただし、
 .B PTRACE_SYSCALL
-¤Î¾ì¹ç¤Ï»Ò¥×¥í¥»¥¹¤¬
-¼¡¤Ë¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÆþ¤ë¤«¥·¥¹¥Æ¥à¥³¡¼¥ë¤«¤éÈ´¤±¤ë¤«¤¹¤ë»þ¤Ë¡¢
+の場合は子プロセスが
+次にシステムコールに入るかシステムコールから抜けるかする時に、
 .B PTRACE_SINGLESTEP
-¤Î¾ì¹ç¤Ï 1 Ì¿Îá (instruction) ¼Â¹Ô¤·¤¿¸å¤ËÄä»ß¤µ¤»¤ë
-(Ä̾ï¤É¤ª¤ê¡¢»Ò¥×¥í¥»¥¹¤Ï¥·¥°¥Ê¥ë¤ò¼õ¤±¼è¤Ã¤¿¾ì¹ç¤Ë¤âÄä»ß¤¹¤ë)¡£
-¿Æ¥×¥í¥»¥¹¤«¤é¸«¤ë¤È¡¢»Ò¥×¥í¥»¥¹¤Ï
+の場合は 1 命令 (instruction) 実行した後に停止させる
+(通常どおり、子プロセスはシグナルを受け取った場合にも停止する)。
+親プロセスから見ると、子プロセスは
 .B SIGTRAP
-¤ò¼õ¿®¤·¤ÆÄä»ß¤·¤¿¤è¤¦¤Ë¸«¤¨¤ë¡£¤½¤Î¤¿¤á¡¢Î㤨¤Ð
+を受信して停止したように見える。そのため、例えば
 .B PTRACE_SYSCALL
-¤ò»È¤¦¤È¡¢1²óÌܤÎÄä»ß¤Ç°ú¤­¿ô¤òÄ´¤Ù¤Æ
+を使うと、1回目の停止で引き数を調べて
 .B PTRACE_SYSCALL
-¤ò¼Â¹Ô¤·¡¢ 2²óÌܤÎÄä»ß¤Ç¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÊÖ¤êÃͤòÄ´¤Ù¤ë¡¢
-¤È¤¤¤¦¤è¤¦¤Ê¤³¤È¤¬¤Ç¤­¤ë¡£
-°ú¤­¿ô
+を実行し、 2回目の停止でシステムコールの返り値を調べる、
+というようなことができる。
+引き数
 .I data
-¤Ï
+は
 .B PTRACE_CONT
-¤Î¾ì¹ç¤ÈƱ¤¸Íͤ˲ò¼á¤µ¤ì¤ë¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+の場合と同じ様に解釈される。
+(\fIaddr\fP は無視される。)
 .TP
-.BR PTRACE_SYSEMU ", " PTRACE_SYSEMU_SINGLESTEP " (Linux 2.6.14 °Ê¹ß)"
+.BR PTRACE_SYSEMU ", " PTRACE_SYSEMU_SINGLESTEP " (Linux 2.6.14 以降)"
 .B PTRACE_SYSEMU
-¤Ï¡¢¼Â¹Ô¤òºÆ³«¤·¡¢¼¡¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÆþ¤ë»þ¤ËÄä»ß¤µ¤»¤ë¡£
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¼Â¹Ô¤µ¤ì¤Ê¤¤¡£
+は、実行を再開し、次のシステムコールに入る時に停止させる。
+システムコールは実行されない。
 .B PTRACE_SYSEMU_SINGLESTEP
-¤âƱÍͤÀ¤¬¡¢¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Ï
-1 Ì¿Îá (singlestep) ¤À¤±¼Â¹Ô¤·¤¿»þÅÀ¤Ç¤âÄä»ß¤µ¤»¤ë¡£
-¤³¤Î¥³¡¼¥ë¤Ï User Mode Linux ¤Î¤è¤¦¤Ë»Ò¥×¥í¥»¥¹¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤òÁ´¤Æ
-¥¨¥ß¥å¥ì¡¼¥È¤·¤è¤¦¤È¤¹¤ë¥×¥í¥°¥é¥à¤Ç»ÈÍѤµ¤ì¤ë¡£
-°ú¤­¿ô
+も同様だが、システムコールでない場合には
+1 命令 (singlestep) だけ実行した時点でも停止させる。
+このコールは User Mode Linux のように子プロセスのシステムコールを全て
+エミュレートしようとするプログラムで使用される。
+引き数
 .I data
-¤Ï
+は
 .B PTRACE_CONT
-¤Î¾ì¹ç¤ÈƱ¤¸Íͤ˲ò¼á¤µ¤ì¤ë¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£
-Á´¤Æ¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¡£)
+の場合と同じ様に解釈される。
+(\fIaddr\fP は無視される。
+全てのアーキテクチャでサポートされているわけではない。)
 .TP
 .B PTRACE_KILL
-»Ò¥×¥í¥»¥¹¤Ë
+子プロセスに
 .B SIGKILL
-¤òÁ÷¤ê½ªÎ»¤µ¤»¤ë¡£(\fIaddr\fP ¤È \fIdata\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+を送り終了させる。(\fIaddr\fP と \fIdata\fP は無視される。)
 .TP
 .B PTRACE_ATTACH
 .I pid
-¤Ç»ØÄꤵ¤ì¤¿¥×¥í¥»¥¹¤ËÀܳ (attach) ¤·¡¢¤½¤ì¤ò¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤Î
-»Ò¥×¥í¥»¥¹¤È¤·¤Æ¥È¥ì¡¼¥¹¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¡£»Ò¥×¥í¥»¥¹¤Ï
+で指定されたプロセスに接続 (attach) し、それを呼び出し元のプロセスの
+子プロセスとしてトレースできるようにする。子プロセスは
 .B PTRACE_TRACEME
-¤·¤¿¤«¤Î¤è¤¦¤Ë¿¶Éñ¤¦¡£¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤Ï¤½¤Î¤Û¤È¤ó¤É¤ÎÌÜŪ¤Ë¤ª¤¤¤Æ¡¢
-¤½¤Î»Ò¥×¥í¥»¥¹¤Î¼ÂºÝ¤Î¿Æ¤Ë¤Ê¤ë (Î㤨¤Ð¡¢»Ò¥×¥í¥»¥¹¤Î¥¤¥Ù¥ó¥È¤Î
-ÄÌÃΤò¼õ¤±¤È¤Ã¤¿¤ê¡¢
+したかのように振舞う。呼び出し元のプロセスはそのほとんどの目的において、
+その子プロセスの実際の親になる (例えば、子プロセスのイベントの
+通知を受けとったり、
 .BR ps (1)
-¤Ç¿Æ¤È¤·¤Æɽ¼¨¤µ¤ì¤¿¤ê¤¹¤ë)¡£¤·¤«¤·¡¢»Ò¥×¥í¥»¥¹¤Ç
+で親として表示されたりする)。しかし、子プロセスで
 .BR getppid (2)
-¤ò¼Â¹Ô¤·¤¿¾ì¹ç¤Ë¤Ï¸µ¤Î¿Æ¥×¥í¥»¥¹¤Î PID ¤¬ÊÖ¤µ¤ì¤ë¡£
-»Ò¥×¥í¥»¥¹¤Ë¤Ï
+を実行した場合には元の親プロセスの PID が返される。
+子プロセスには
 .B SIGSTOP
-¤¬Á÷¤é¤ì¤ë¤¬¡¢¤³¤Î¸Æ¤Ó½Ð¤·¤¬´°Î»¤¹¤ë¤Þ¤Ç¤Ë
-ɬ¤º¤·¤âÄä»ß¤¹¤ë¤È¤Ï¸Â¤é¤Ê¤¤¡£»Ò¥×¥í¥»¥¹¤ÎÄä»ß¤òÂԤĤˤÏ
+が送られるが、この呼び出しが完了するまでに
+必ずしも停止するとは限らない。子プロセスの停止を待つには
 .BR wait (2)
-¤ò»ÈÍѤ¹¤ë¤³¤È¡£(\fIaddr\fP ¤È \fIdata\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+を使用すること。(\fIaddr\fP と \fIdata\fP は無視される。)
 .TP
 .B PTRACE_DETACH
 .B PTRACE_CONT
-¤ÈƱÍͤËÄä»ß¤·¤¿»Ò¥×¥í¥»¥¹¤òºÆ³«¤¹¤ë¡£¤¿¤À¤·
-¤Þ¤º¤½¤Î¥×¥í¥»¥¹¤«¤é¤ÎʬΥ (detach) ¤ò¹Ô¤¤¡¢
+と同様に停止した子プロセスを再開する。ただし
+まずそのプロセスからの分離 (detach) を行い、
 .B PTRACE_ATTACH
-¤Ç¤Î¿Æ¤ÎÀڤ괹¤¨¤Ë¤è¤ë¸ú²Ì¤È
+での親の切り換えによる効果と
 .B PTRACE_TRACEME
-¤Î¸ú²Ì¤ò¼è¤ê¾Ã¤¹¡£°Õ¿Þ¤·¤¿¤â¤Î¤Ç¤Ï¤Ê¤¤¤À¤í¤¦¤¬¡¢
-Linux ¤Ç¤Ï¡¢¥È¥ì¡¼¥¹¤µ¤ì¤Æ¤¤¤ë»Ò¥×¥í¥»¥¹¤Ï¤É¤Î¤è¤¦¤ÊÊýË¡¤Ç¥È¥ì¡¼¥¹¤ò
-³«»Ï¤µ¤ì¤¿¤È¤·¤Æ¤â¡¢¤³¤ÎÊýË¡¤ÇʬΥ (detach) ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
-.SH ÊÖ¤êÃÍ
-À®¸ù¤¹¤ë¤È¡¢
+の効果を取り消す。意図したものではないだろうが、
+Linux では、トレースされている子プロセスはどのような方法でトレースを
+開始されたとしても、この方法で分離 (detach) することができる。
+(\fIaddr\fP は無視される。)
+.SH 返り値
+成功すると、
 .B PTRACE_PEEK*
-¤Î¾ì¹ç¤ÏÍ׵ᤷ¤¿¥Ç¡¼¥¿¤òÊÖ¤·¡¢
-¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï 0 ¤òÊÖ¤¹¡£
-¥¨¥é¡¼¤Î¾ì¹ç¤Ï \-1 ¤òÊÖ¤·¡¢
+の場合は要求したデータを返し、
+それ以外の場合は 0 を返す。
+エラーの場合は \-1 を返し、
 .I errno
-¤¬Å¬ÀÚ¤ËÀßÄꤵ¤ì¤ë¡£
+が適切に設定される。
 .B PTRACE_PEEK*
-¤¬À®¸ù¤·¤ÆÊÖ¤¹Ãͤ⡡\-1 ¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ë¤¿¤á¡¢
-¤½¤Î¤è¤¦¤ÊÍ×µá¤Î¾ì¹ç¤Ë¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ¤Ï
+が成功して返す値も \-1 になることがあるため、
+そのような要求の場合には、呼び出し元は
 .I errno
-¤òÄ´¤Ù¡¢¥¨¥é¡¼¤«È¯À¸¤·¤¿¤Î¤«¤É¤¦¤«¤òȽÃǤ·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-.SH ¥¨¥é¡¼
+を調べ、エラーか発生したのかどうかを判断しなければならない。
+.SH ã\82¨ã\83©ã\83¼
 .TP
 .B EBUSY
-(i386 ¤Î¤ß) ¥Ç¥Ð¥Ã¥°¥ì¥¸¥¹¥¿¤Î³ÎÊݤޤ¿¤Ï²òÊü¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤¿¡£
+(i386 のみ) デバッグレジスタの確保または解放でエラーが発生した。
 .TP
 .B EFAULT
-¿Æ¥×¥í¥»¥¹¤Þ¤¿¤Ï»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤ÎÉÔÀµ¤ÊÎΰè¤ËÆɤ߽ñ¤­¤·¤è¤¦¤È¤·¤¿¡£
-¤ª¤½¤é¤¯¤½¤ÎÎΰ褬¥Þ¥Ã¥Ô¥ó¥°¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¡¢
-¤½¤ÎÎΰè¤Ø¤Î¥¢¥¯¥»¥¹¤¬µö¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¤Ç¤¢¤ë¡£
-ÉÔ±¿¤Ê¤³¤È¤Ë¡¢Linux ¤Ç¤Ï¤³¤Î¤è¤¦¤Ê¥¨¥é¡¼¤Î¾ì¹ç¡¢Â¿¤«¤ì¾¯¤Ê¤«¤ì
-×ó°ÕŪ¤Ë
+親プロセスまたは子プロセスのメモリの不正な領域に読み書きしようとした。
+おそらくその領域がマッピングされていないか、
+その領域へのアクセスが許されていないかである。
+不運なことに、Linux ではこのようなエラーの場合、多かれ少なかれ
+恣意的に
 .B EIO
-¤òÊÖ¤·¤¿¤ê
+を返したり
 .B EFAULT
-¤òÊÖ¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤¢¤ë¡£
+を返したりすることがある。
 .TP
 .B EINVAL
-ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó¤òÀßÄꤷ¤è¤¦¤È¤·¤¿¡£
+不正なオプションを設定しようとした。
 .TP
 .B EIO
-\fIrequest\fP ¤¬ÉÔÀµ¤Ç¤¢¤ë¡£
-¤Þ¤¿¤Ï¡¢¿Æ¥×¥í¥»¥¹¤Þ¤¿¤Ï»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
-ÉÔÀµ¤ÊÎΰè¤ËÆɤ߽ñ¤­¤·¤è¤¦¤È¤·¤¿¡£
-¤Þ¤¿¤Ï¡¢¥ï¡¼¥É¶­³¦°ãÈ¿¤¬¤¢¤Ã¤¿¡£
-¤Þ¤¿¤Ï¡¢¼Â¹ÔºÆ³«¤ÎÍ×µá¤ÇÉÔÀµ¤Ê¥·¥°¥Ê¥ë¤ò»ØÄꤷ¤¿¡£
+\fIrequest\fP が不正である。
+または、親プロセスまたは子プロセスのメモリの
+不正な領域に読み書きしようとした。
+または、ワード境界違反があった。
+または、実行再開の要求で不正なシグナルを指定した。
 .TP
 .B EPERM
-»ØÄꤷ¤¿¥×¥í¥»¥¹¤ò¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£¤³¤ì¤Ï¿Æ¥×¥í¥»¥¹¤¬
-ɬÍפʸ¢¸Â (ɬÍפʥ±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤Ï
+指定したプロセスをトレースすることができない。これは親プロセスが
+必要な権限 (必要なケーパビリティは
 .BR CAP_SYS_PTRACE )
-¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¤³¤È¤¬¸¶°ø¤Î¾ì¹ç¤¬¤¢¤ë¡£
-ʬ¤«¤ê¤ä¤¹¤¤Íýͳ¤òµó¤²¤ë¤Ê¤é¡¢
-ÈóÆø¢¥×¥í¥»¥¹¤Ï¥·¥°¥Ê¥ë¤òÁ÷¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¥×¥í¥»¥¹¤ò¥È¥ì¡¼¥¹¤Ç¤­¤Ê¤¤¤·¡¢
-set-user-ID/set-group-ID ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥×¥í¥»¥¹¤Ï¥È¥ì¡¼¥¹¤Ç¤­¤Ê¤¤¡£
-¤Þ¤¿¤Ï¡¢¥×¥í¥»¥¹¤Ï¤¹¤Ç¤Ë¥È¥ì¡¼¥¹Ãæ¤Ç¤¢¤ë¡¢
-¤Þ¤¿¤Ï
+を持っていないことが原因の場合がある。
+分かりやすい理由を挙げるなら、
+非特権プロセスはシグナルを送ることができないプロセスをトレースできないし、
+set-user-ID/set-group-ID プログラムを実行しているプロセスはトレースできない。
+または、プロセスはすでにトレース中である、
+または
 .BR init (8)
-¥×¥í¥»¥¹ (PID ¤¬ 1) ¤Ç¤¢¤ë¡£
+プロセス (PID が 1) である。
 .TP
 .B ESRCH
-»ØÄꤷ¤¿¥×¥í¥»¥¹¤¬Â¸ºß¤·¤Ê¤¤¡£
-¤Þ¤¿¤Ï¡¢»ØÄꤷ¤¿¥×¥í¥»¥¹¤Ï¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤¬
-¸½ºß¥È¥ì¡¼¥¹Ãæ¤Î»Ò¥×¥í¥»¥¹¤Ç¤Ï¤Ê¤¤¡£
-¤Þ¤¿¤Ï¡¢»ØÄꤷ¤¿¥×¥í¥»¥¹¤¬Ää»ß¤·¤Æ¤¤¤Ê¤¤ (Ää»ß¤·¤Æ¤¤¤ë¤³¤È¤¬É¬ÍפÊÍ×µá¤Î¾ì¹ç)¡£
-.SH ½àµò
+指定したプロセスが存在しない。
+または、指定したプロセスは呼び出したプロセスが
+現在トレース中の子プロセスではない。
+または、指定したプロセスが停止していない (停止していることが必要な要求の場合)。
+.SH 準拠
 SVr4, 4.3BSD.
-.SH Ãí°Õ
+.SH 注意
 .BR ptrace ()
-¤Î°ú¤­¿ô¤Ï¾å¤Î¤è¤¦¤Ê¥×¥í¥È¥¿¥¤¥×¤Ë´ð¤Å¤¤¤Æ²ò¼á¤µ¤ì¤ë¤¬¡¢
-glibc ¤Ç¤Ï¡¢¸½ºß¤Î¤È¤³¤í
+の引き数は上のようなプロトタイプに基づいて解釈されるが、
+glibc では、現在のところ
 .BR ptrace ()
-¤Ï \fIrequest\fP °ú¤­¿ô¤À¤±¤¬¸ÇÄê¤Î²ÄÊÑĹ°ú¤­¿ô´Ø¿ô¤È¤·¤Æ
-Àë¸À¤µ¤ì¤Æ¤¤¤ë¡£
-¤³¤ì¤ÏɬÍפʤ±¤ì¤Ð»Ä¤ê¤Î°ú¤­¿ô¤Ï¾Êά²Äǽ¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¤¬¡¢
-¤½¤ì¤Ï
+は \fIrequest\fP 引き数だけが固定の可変長引き数関数として
+宣言されている。
+これは必要なければ残りの引き数は省略可能であることを意味するが、
+それは
 .BR gcc (1)
-¤ÎÌÀʸ²½¤µ¤ì¤Æ¤¤¤Ê¤¤Æ°ºî¤òÍøÍѤ·¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ë¡£
+の明文化されていない動作を利用していることになる。
 .LP
 .BR init (8)
-¤¹¤Ê¤ï¤Á PID ¤¬ 1 ¤Î¥×¥í¥»¥¹¤Ï¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£
+すなわち PID が 1 のプロセスはトレースすることができない。
 .LP
-¥á¥â¥ê¤ä USER Îΰè¤ÎÆâÍƤäÇÛÃ֤ϠOS ¤´¤È¡¢¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤´¤È¤Ë
-Èó¾ï¤Ë°Í¸¤¹¤ë¡£
-¥ª¥Õ¥»¥Ã¥È¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢ÊÖ¤µ¤ì¤ë¥Ç¡¼¥¿¤Ï
+メモリや USER 領域の内容や配置は OS ごと、アーキテクチャごとに
+非常に依存する。
+オフセットが指定された場合、返されるデータは
 .I "struct user"
-¤ÎÄêµÁ¤È´°Á´¤Ë°ìÃפ·¤Ê¤¤¤³¤È¤â¤¢¤ê¤¨¤ë¡£
-.\" http://lkml.org/lkml/2008/5/8/375 »²¾È¡£
+の定義と完全に一致しないこともありえる。
+.\" http://lkml.org/lkml/2008/5/8/375 参照。
 .LP
-¡Ö¥ï¡¼¥É (word) ¡×¤ÎÂ礭¤µ¤Ï OS ¤Ë¤è¤Ã¤Æ·è¤Þ¤ë¡£
-(Î㤨¤Ð¡¢32 ¥Ó¥Ã¥È¤Î Linux ¤Ç¤Ï 32 ¥Ó¥Ã¥È¤Ç¤¢¤ë¡¢¤Ê¤É¡£)
+「ワード (word) 」の大きさは OS によって決まる。
+(例えば、32 ビットの Linux では 32 ビットである、など。)
 .LP
-¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥È¥ì¡¼¥¹¤µ¤ì¤ë¥×¥í¥»¥¹¤ÎÆ°ºî¤Ëº³ºÙ¤Ê°ã¤¤¤¬
-µ¯¤³¤ë¤³¤È¤¬¤¢¤ë¡£Î㤨¤Ð¡¢¥×¥í¥»¥¹¤¬
+トレースすることによってトレースされるプロセスの動作に些細な違いが
+起こることがある。例えば、プロセスが
 .B PTRACE_ATTACH
-¤Ë¤è¤Ã¤ÆÀܳ¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¥×¥í¥»¥¹¤¬Ää»ß¤·¤¿»þ¤Ç¤âËÜÍè¤Î¿Æ¤Ï
+によって接続された場合には、そのプロセスが停止した時でも本来の親は
 .BR wait (2)
-¤ò»È¤Ã¤ÆÄÌÃΤò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤º¡¢¿·¤·¤¤¿Æ¤¬¸úΨ¤è¤¯
-¤³¤ÎÄÌÃΤò¿¿»÷¤ëÊýË¡¤â¤Ê¤¤¡£
+を使って通知を受けることができず、新しい親が効率よく
+この通知を真似る方法もない。
 .LP
-¿Æ¥×¥í¥»¥¹¤¬
+親プロセスが
 .B PTRACE_EVENT_*
-¤¬¥»¥Ã¥È¤µ¤ì¤¿¥¤¥Ù¥ó¥È¤ò¼õ¿®¤·¤¿¾ì¹ç¡¢
-»Ò¥×¥í¥»¥¹¤ÏÄ̾ïÄ̤ê¤Î¥·¥°¥Ê¥ëÇÛÁ÷¤¬¹Ô¤ï¤ì¤ë¾õÂ֤ˤʤ¤¡£
-¤Ä¤Þ¤ê¡¢¿Æ¥×¥í¥»¥¹¤¬¡¢
-¥·¥°¥Ê¥ë¤Ë¤è¤ê
+がセットされたイベントを受信した場合、
+子プロセスは通常通りのシグナル配送が行われる状態にない。
+つまり、親プロセスが、
+シグナルにより
 .BR ptrace (PTRACE_CONT)
-¤ò¹Ô¤Ã¤¿¤ê¡¢
+を行ったり、
 .BR ptrace (PTRACE_KILL)
-¤ò¹Ô¤Ã¤¿¤ê¤Ç¤­¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£
-¤³¤é¤é¤Î¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®¸å¤Ï¡¢»Ò¥×¥í¥»¥¹¤ò½ªÎ» (kill) ¤¹¤ë¤Î¤Ë¡¢
-¥·¥°¥Ê¥ë
+を行ったりできないということである。
+こららのメッセージの受信後は、子プロセスを終了 (kill) するのに、
+シグナル
 .B SIGKILL
-¤ò»ØÄꤷ¤Æ
+を指定して
 .BR kill (2)
-¤ò¹Ô¤¦ÊýË¡¤òÂå¤ï¤ê¤Ë»ÈÍѤǤ­¤ë¡£
+を行う方法を代わりに使用できる。
 .LP
-¤³¤Î¥Þ¥Ë¥å¥¢¥ë¤Ï¸½ºß¤Î Linux ¤Ë¤ª¤±¤ë
+このマニュアルは現在の Linux における
 .BR ptrace ()
-¥³¡¼¥ë¤ÎÆ°ºî¤Ë¤Ä¤¤¤Æµ­½Ò¤·¤Æ¤¤¤ë¡£Â¾¤Î UNIX ¤Ç¤Ï
-¤½¤ÎÆ°ºî¤ÏÃø¤·¤¯°Û¤Ê¤ë¡£
-¤¤¤«¤Ê¤ë¾ì¹ç¤â
+コールの動作について記述している。他の UNIX では
+その動作は著しく異なる。
+いかなる場合も
 .BR ptrace ()
-¤ò»È¤¦¤È OS ¤ä¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤ËÈó¾ï¤Ë°Í¸¤·¤¿¤â¤Î¤Ë¤Ê¤ë¡£
+を使うと OS やアーキテクチャに非常に依存したものになる。
 .LP
-SunOS ¤Î¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸¤Ë¤Ï
+SunOS のマニュアル・ページには
 .BR ptrace ()
-¤Ï¡ÖÆÈÆäÇÉԲIJò¡×¤Èµ­½Ò¤µ¤ì¤Æ¤ª¤ê¡¢¤Þ¤µ¤·¤¯¤½¤¦¤Ç¤¢¤ë¡£
-Solaris 2 ¤Ç¤Ï proc ¥Ù¡¼¥¹¤Î
-¥Ç¥Ð¥Ã¥°¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¤·¤Æ
+は「独特で不可解」と記述されており、まさしくそうである。
+Solaris 2 では proc ベースの
+デバッグのインターフェースとして
 .BR ptrace ()
-¤Î¾å°Ì¸ß´¹´Ø¿ô¤¬¼ÂÁõ¤µ¤ì¡¢¤è¤ê¶¯ÎϤǰì´ÓÀ­¤Î¤¢¤ë¤â¤Î¤È¤Ê¤Ã¤Æ¤¤¤ë¡£
-.SH ¥Ð¥°
-¥«¡¼¥Í¥ë 2.6 ¤Î¥Ø¥Ã¥À¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿¥Û¥¹¥È¤Ç¤Ï¡¢
+の上位互換関数が実装され、より強力で一貫性のあるものとなっている。
+.SH ã\83\90ã\82°
+カーネル 2.6 のヘッダがインストールされたホストでは、
 .B PTRACE_SETOPTIONS
-¤Ï¥«¡¼¥Í¥ë 2.4 ¤Î¥Ø¥Ã¥À¤È¤Ï°Û¤Ê¤ëÃͤÇÀë¸À¤µ¤ì¤ë¡£
-¤³¤Î¤¿¤á¡¢¥«¡¼¥Í¥ë 2.6 ¤Î¥Ø¥Ã¥À¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï
-¥«¡¼¥Í¥ë 2.4 ¤Ç¤ÏÀµ¤·¤¯Æ°ºî¤·¤Ê¤¤¡£
-¤³¤ÎÌäÂê¤Ï¡¢
+はカーネル 2.4 のヘッダとは異なる値で宣言される。
+このため、カーネル 2.6 のヘッダでコンパイルされたアプリケーションは
+カーネル 2.4 では正しく動作しない。
+この問題は、
 .B PTRACE_SETOPTIONS
-¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤¿ºÝ¤Ï¡¢
+が定義されていた際は、
 .B PTRACE_SETOPTIONS
-¤ò
+を
 .B PTRACE_OLDSETOPTIONS
-¤ËÄêµÁ¤·Ä¾¤¹¤³¤È¤ÇÂнè¤Ç¤­¤ë¡£
-.SH ´ØÏ¢¹àÌÜ
+に定義し直すことで対処できる。
+.SH 関連項目
 .BR gdb (1),
 .BR strace (1),
 .BR execve (2),