.\" 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 ̾Á°
+.SH 名前
.\"O ptrace \- process trace
-ptrace \- ¥×¥í¥»¥¹¤Î¥È¥ì¡¼¥¹
-.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 説明
.\"O The
.\"O .BR ptrace ()
.\"O system call provides a means by which a parent process may observe
.\"O It is primarily used to implement breakpoint debugging and system
.\"O call tracing.
.BR ptrace ()
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢¿Æ¥×¥í¥»¥¹¤¬¡¢ÊÌ¤Î¥×¥í¥»¥¹¤Î¼Â¹Ô¤Î´Æ»ë/À©¸æ¤ò
-¹Ô¤Ã¤¿¤ê¡¢¥³¥¢¥¤¥á¡¼¥¸ (core image) ¤ä¥ì¥¸¥¹¥¿¤ÎÄ´ºº/Êѹ¹¤ò
-¹Ô¤Ã¤¿¤ê¤¹¤ë¼êÃʤòÄ󶡤¹¤ë¡£
+システムコールは、親プロセスが、別のプロセスの実行の監視/制御を
+行ったり、コアイメージ (core image) やレジスタの調査/変更を
+行ったりする手段を提供する。
.BR ptrace ()
-¤Ï¡¢¼ç¤Ë¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤Ë¤è¤ë¥Ç¥Ð¥Ã¥°¤ä¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î¥È¥ì¡¼¥¹¤ò
-¼ÂÁõ¤¹¤ë¤Î¤ËÍѤ¤¤é¤ì¤ë¡£
+は、主にブレークポイントによるデバッグやシステムコールのトレースを
+実装するのに用いられる。
.LP
.\"O The parent can initiate a trace by calling
.\"O .BR fork (2)
.\"O .BR exec (3).
.\"O Alternatively, the parent may commence trace of an existing process using
.\"O .BR PTRACE_ATTACH .
-¥È¥ì¡¼¥¹¤ò³«»Ï¤¹¤ë¤Ë¤Ï¡¢¤Þ¤º¿Æ¥×¥í¥»¥¹¤Ç
+トレースを開始するには、まず親プロセスで
.BR fork (2)
-¤ò¸Æ¤Ó½Ð¤¹¡£À¸À®¤µ¤ì¤¿»Ò¥×¥í¥»¥¹¤Ç
+を呼び出す。生成された子プロセスで
.B PTRACE_TRACEME
-¤ò¹Ô¤¤¡¢Â³¤¤¤Æ (ŵ·¿Åª¤Ë¤Ï)
+を行い、続いて (典型的には)
.BR exec (3)
-¤ò¹Ô¤Ê¤¦¡£
-Ê̤ÎÊýË¡¤È¤·¤Æ¤Ï¡¢
-¿Æ¥×¥í¥»¥¹¤¬´û¸¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ
+を行なう。
+別の方法としては、
+親プロセスが既存のプロセスに対して
.B PTRACE_ATTACH
-¤ò»ÈÍѤ·¡¢¥È¥ì¡¼¥¹¤ò³«»Ï¤¹¤ë¡£
+を使用し、トレースを開始する。
.LP
.\"O While being traced, the child will stop each time a signal is delivered,
.\"O even if the signal is being ignored.
.\"O The parent then causes the child to continue,
.\"O optionally ignoring the delivered signal
.\"O (or even delivering a different signal instead).
-¥È¥ì¡¼¥¹¤Î¼Â¹ÔÃæ¡¢»Ò¥×¥í¥»¥¹¤Ï¥·¥°¥Ê¥ë¤¬ÇÛÁ÷¤µ¤ì¤ë¤¿¤Ó¤Ë¡¢
-¤¿¤È¤¨¤½¤Î¥·¥°¥Ê¥ë¤¬Ìµ»ë¤¹¤Ù¤¤â¤Î¤Ç¤¢¤Ã¤Æ¤âÄä»ß¤¹¤ë
+トレースの実行中、子プロセスはシグナルが配送されるたびに、
+たとえそのシグナルが無視すべきものであっても停止する
.RB ( SIGKILL
-¤ÏÎã³°¤Ç¡¢Ä̾ï¤É¤ª¤ê¤Î¸ú²Ì¤ò¤â¤¿¤é¤¹)¡£
-¿Æ¥×¥í¥»¥¹¤Ë¤Ï¼¡¤Î
+は例外で、通常どおりの効果をもたらす)。
+親プロセスには次の
.BR wait (2)
-¤ÇÄÌÃΤµ¤ì¡¢Ää»ß¤·¤Æ¤¤¤ë´Ö¤Ë»Ò¥×¥í¥»¥¹¤òÄ´¤Ù¤¿¤ê½¤Àµ¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
-¤½¤·¤Æ¿Æ¥×¥í¥»¥¹¤Ï»Ò¥×¥í¥»¥¹¤Î¼Â¹Ô¤òºÆ³«¤µ¤»¤ë¤¬¡¢ÇÛÁ÷¤µ¤ì¤¿
-¥·¥°¥Ê¥ë¤ò̵»ë¤¹¤ë¤³¤È¤â¤Ç¤¤ë (¤¢¤ë¤¤¤ÏÂå¤ï¤ê¤ËÊ̤Υ·¥°¥Ê¥ë¤ò
-ÇÛÁ÷¤¹¤ë¤³¤È¤â¤Ç¤¤ë) ¡£
+で通知され、停止している間に子プロセスを調べたり修正したりすることができる。
+そして親プロセスは子プロセスの実行を再開させるが、配送された
+シグナルを無視することもできる (あるいは代わりに別のシグナルを
+配送することもできる) 。
.LP
.\"O When the parent is finished tracing, it can terminate the child with
.\"O .B PTRACE_KILL
.\"O or cause it to continue executing in a normal, untraced mode
.\"O via
.\"O .BR PTRACE_DETACH .
-¿Æ¥×¥í¥»¥¹¤¬¥È¥ì¡¼¥¹¤ò½ªÎ»¤¹¤ëºÝ¤Ë¤Ï¡¢
+親プロセスがトレースを終了する際には、
.B PTRACE_KILL
-¤ò»ÈÍѤ·¤Æ»Ò¥×¥í¥»¥¹¤ò½ªÎ»¤µ¤»¤ë¤³¤È¤â¤Ç¤¤ë¤·¡¢
+を使用して子プロセスを終了させることもできるし、
.B PTRACE_DETACH
-¤òÍѤ¤¤ÆÄ̾ï¤Î¥È¥ì¡¼¥¹¤Ê¤·¤Î¥â¡¼¥É¤Ë¤·¤Æ¡¢
-¼Â¹Ô¤ò·Ñ³¤µ¤»¤ë¤³¤È¤â¤Ç¤¤ë¡£
+を用いて通常のトレースなしのモードにして、
+実行を継続させることもできる。
.LP
.\"O The value of \fIrequest\fP determines the action to be performed:
-\fIrequest\fP ¤ÎÃͤ¬¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÆ°ºî¤ò·èÄꤹ¤ë:
+\fIrequest\fP の値がこのシステムコールの動作を決定する:
.TP
.B PTRACE_TRACEME
.\"O Indicates that this process is to be traced by its parent.
.\"O A process probably shouldn't make this request if its parent
.\"O isn't expecting to trace it.
.\"O (\fIpid\fP, \fIaddr\fP, and \fIdata\fP are ignored.)
-¤³¤Î¥×¥í¥»¥¹¤¬¿Æ¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¥È¥ì¡¼¥¹¤µ¤ì¤ë¤³¤È¤òɽ¤¹¡£
-¤³¤Î¥×¥í¥»¥¹¤Ë
+このプロセスが親プロセスによってトレースされることを表す。
+このプロセスに
.RB ( SIGKILL
-°Ê³°¤Î) ¥·¥°¥Ê¥ë¤¬ÇÛÁ÷¤µ¤ì¤ë¤È¡¢
-¥×¥í¥»¥¹¤ÏÄä»ß¤·¡¢¿Æ¥×¥í¥»¥¹¤Ë
+以外の) シグナルが配送されると、
+プロセスは停止し、親プロセスに
.BR wait (2)
-¤òÄ̤¸¤ÆÄÌÃΤµ¤ì¤ë¡£
-¤Þ¤¿¡¢¤³¤ì°Ê¹ß¤Ï¤³¤Î¥×¥í¥»¥¹¤¬
+を通じて通知される。
+また、これ以降はこのプロセスが
.BR execve (2)
-¤ò¸Æ¤Ó½Ð¤¹ÅÙ¤Ë
+を呼び出す度に
.B SIGTRAP
-¤¬Á÷¿®¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£
-¤³¤ì¤Ë¤è¤Ã¤Æ¡¢¿Æ¥×¥í¥»¥¹¤Ï
-¿·¤·¤¤¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤ò³«»Ï¤¹¤ëÁ°¤ËÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
-¿Æ¥×¥í¥»¥¹¤¬¼«¥×¥í¥»¥¹¤ò¥È¥ì¡¼¥¹¤¹¤ë¤Ä¤â¤ê¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢
-¤ª¤½¤é¤¯¤³¤Î¥×¥í¥»¥¹¤ÏËÜÍ×µá¤ò¹Ô¤¦¤Ù¤¤Ç¤Ï¤Ê¤¤¤À¤í¤¦¡£
-(\fIpid\fP, \fIaddr\fP, \fIdata\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+が送信されるようになる。
+これによって、親プロセスは
+新しいプログラムが実行を開始する前に制御することができる。
+親プロセスが自プロセスをトレースするつもりがない場合には、
+おそらくこのプロセスは本要求を行うべきではないだろう。
+(\fIpid\fP, \fIaddr\fP, \fIdata\fP は無視される。)
.LP
.\"O The above request is used only by the child process;
.\"O the rest are used only by the parent.
.\"O .BR PTRACE_KILL ,
.\"O the child process must
.\"O be stopped.
-¾åµ¤ÎÍ×µá¤Ï»Ò¥×¥í¥»¥¹¤À¤±¤¬¹Ô¤Ê¤¦¤â¤Î¤Ç¤¢¤ë¡£
-»Ä¤ê¤Ï¿Æ¥×¥í¥»¥¹¤À¤±¤¬¹Ô¤Ê¤¦¤â¤Î¤Ç¤¢¤ë¡£
-°Ê²¼¤ÎÍ×µá¤Ç¤Ï¡¢\fIpid\fP ¤ÇÁàºî¤ÎÂоݤȤʤë
-»Ò¥×¥í¥»¥¹¤ò»ØÄꤹ¤ë¡£
+上記の要求は子プロセスだけが行なうものである。
+残りは親プロセスだけが行なうものである。
+以下の要求では、\fIpid\fP で操作の対象となる
+子プロセスを指定する。
.B PTRACE_KILL
-¤ò½ü¤¡¢Í×µá¤ò¹Ô¤Ê¤¦¤¿¤á¤Ë¤Ï
-»Ò¥×¥í¥»¥¹¤ÏÄä»ß¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+を除き、要求を行なうためには
+子プロセスは停止していなければならない。
.TP
.BR PTRACE_PEEKTEXT ", " PTRACE_PEEKDATA
.\"O Reads a word at the location
.\"O Linux does not have separate text and data address spaces, so the two
.\"O requests are currently equivalent.
.\"O (The argument \fIdata\fP is ignored.)
-»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
+子プロセスのメモリの
.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,
.\"O architecture.
.\"O See NOTES.
.\"O (\fIdata\fP is ignored.)
-»Ò¥×¥í¥»¥¹¤Î 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
.\"O Copies the word
.\"O .I addr
.\"O in the child's memory.
.\"O As above, the two requests are currently equivalent.
-¥ï¡¼¥É
+ワード
.I data
-¤ò»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
+を子プロセスのメモリの
.I addr
-¤Î°ÌÃ֤إ³¥Ô¡¼¤¹¤ë¡£¾å¤ÈƱÍͤˡ¢¸½ºß¤Î¤È¤³¤íÆó¤Ä¤Î
-Í×µá¤ÏƱ¤¸¤â¤Î¤Ç¤¢¤ë¡£
+の位置へコピーする。上と同様に、現在のところ二つの
+要求は同じものである。
.TP
.B PTRACE_POKEUSER
.\" PTRACE_POKEUSR in kernel source, but glibc uses PTRACE_POKEUSER,
.\"O As above, the offset must typically be word-aligned.
.\"O In order to maintain the integrity of the kernel,
.\"O some modifications to the USER area are disallowed.
-¥ï¡¼¥É
+ワード
.I data
-¤ò»Ò¥×¥í¥»¥¹¤Î USER Îΰè¤Î¥ª¥Õ¥»¥Ã¥È
+を子プロセスの USER 領域のオフセット
.I addr
-¤Î°ÌÃ֤˥³¥Ô¡¼¤¹¤ë¡£
-¾å¤ÈƱÍͤˡ¢Ä̾¥ª¥Õ¥»¥Ã¥È¤Ï¥ï¡¼¥É¶³¦¤Ë¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-¥«¡¼¥Í¥ë¤Î´°Á´À (integrity) ¤ò°Ý»ý¤¹¤ë¤¿¤á¡¢
-Êѹ¹ÆâÍƤˤè¤Ã¤Æ¤Ï USER Îΰè¤ÎÊѹ¹¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¡£
+の位置にコピーする。
+上と同様に、通常、オフセットはワード境界になければならない。
+カーネルの完全性 (integrity) を維持するため、
+変更内容によっては USER 領域の変更は禁止されている。
.TP
.BR PTRACE_GETREGS ", " PTRACE_GETFPREGS
.\"O Copies the child's general purpose or floating-point registers,
.\"O See \fI<sys/user.h>\fP for information on
.\"O the format of this data.
.\"O (\fIaddr\fP is ignored.)
-¤½¤ì¤¾¤ì¡¢»Ò¥×¥í¥»¥¹¤ÎÈÆÍѥ쥸¥¹¥¿¡¢ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤ò¿Æ¥×¥í¥»¥¹¤Î
-\fIdata\fP ¤Î°ÌÃ֤˥³¥Ô¡¼¤¹¤ë¡£¤³¤Î data ¤Î½ñ¼°¤Ë´Ø¤·¤Æ¤Ï
-\fI<sys/user.h>\fP ¤ò»²¾È¤¹¤ë¤³¤È¡£(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+それぞれ、子プロセスの汎用レジスタ、浮動小数点レジスタを親プロセスの
+\fIdata\fP の位置にコピーする。この data の書式に関しては
+\fI<sys/user.h>\fP を参照すること。(\fIaddr\fP は無視される。)
.TP
.\"O .BR PTRACE_GETSIGINFO " (since Linux 2.3.99-pre6)"
-.BR PTRACE_GETSIGINFO " (Linux 2.3.99-pre6 °Ê¹ß)"
+.BR PTRACE_GETSIGINFO " (Linux 2.3.99-pre6 以降)"
.\"O Retrieve information about the signal that caused the stop.
.\"O Copies a \fIsiginfo_t\fP structure (see
.\"O .BR sigaction (2))
.\"O from the child to location \fIdata\fP in the parent.
.\"O (\fIaddr\fP is ignored.)
-Ää»ß¤Î¸¶°ø¤È¤Ê¤Ã¤¿¥·¥°¥Ê¥ë¤Ë´Ø¤¹¤ë¾ðÊó¤ò¼èÆÀ¤¹¤ë¡£
-\fIsiginfo_t\fP ¹½Â¤ÂÎ
+停止の原因となったシグナルに関する情報を取得する。
+\fIsiginfo_t\fP 構造体
.RB ( sigaction (2)
-»²¾È) ¤ò»Ò¥×¥í¥»¥¹¤«¤é¿Æ¥×¥í¥»¥¹¤Î \fIdata\fP ¤Î°ÌÃ֤˥³¥Ô¡¼¤¹¤ë¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+参照) を子プロセスから親プロセスの \fIdata\fP の位置にコピーする。
+(\fIaddr\fP は無視される。)
.TP
.BR PTRACE_SETREGS ", " PTRACE_SETFPREGS
.\"O Copies the child's general purpose or floating-point registers,
.\"O some general
.\"O purpose register modifications may be disallowed.
.\"O (\fIaddr\fP is ignored.)
-¤½¤ì¤¾¤ì¡¢»Ò¥×¥í¥»¥¹¤ÎÈÆÍѥ쥸¥¹¥¿¡¢ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤Ë
-¿Æ¥×¥í¥»¥¹¤Î \fIdate\fP ¤Î°ÌÃÖ¤«¤é¥³¥Ô¡¼¤¹¤ë¡£
+それぞれ、子プロセスの汎用レジスタ、浮動小数点レジスタに
+親プロセスの \fIdate\fP の位置からコピーする。
.B PTRACE_POKEUSER
-¤ÈƱÍͤˡ¢ÈÆÍѥ쥸¥¹¥¿¤Ë¤è¤Ã¤Æ¤Ï
-Êѹ¹¤¬¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ë¡£ (\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+と同様に、汎用レジスタによっては
+変更が禁止されている場合がある。 (\fIaddr\fP は無視される。)
.TP
.\"O .BR PTRACE_SETSIGINFO " (since Linux 2.3.99-pre6)"
-.BR PTRACE_SETSIGINFO " (Linux 2.3.99-pre6 °Ê¹ß)"
+.BR PTRACE_SETSIGINFO " (Linux 2.3.99-pre6 以降)"
.\"O Set signal information.
.\"O Copies a \fIsiginfo_t\fP structure from location \fIdata\fP in the
.\"O parent to the child.
.\"O .BR ptrace ()
.\"O itself.
.\"O (\fIaddr\fP is ignored.)
-¥·¥°¥Ê¥ë¾ðÊó¤òÀßÄꤹ¤ë¡£
-\fIsiginfo_t\fP ¹½Â¤ÂΤò¿Æ¥×¥í¥»¥¹¤Î¥Ç¡¼¥¿ \fIdata\fP ¤Î°ÌÃÖ¤«¤é
-»Ò¥×¥í¥»¥¹¤Ë¥³¥Ô¡¼¤¹¤ë¡£
-¤³¤Î½èÍý¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë¤Î¤Ï¡¢»Ò¥×¥í¥»¥¹¤ËÄ̾ï¤ÏÇÛÁ÷¤µ¤ì¤ë¤Ï¤º¤Ç
-¥È¥ì¡¼¥µ¤ËÊ᪤µ¤ì¤¿¥·¥°¥Ê¥ë¤Ë¤Ä¤¤¤Æ¤À¤±¤Ç¤¢¤ë¡£
-¤³¤ì¤é¤ÎÄ̾ï¤Î¥·¥°¥Ê¥ë¤È
+シグナル情報を設定する。
+\fIsiginfo_t\fP 構造体を親プロセスのデータ \fIdata\fP の位置から
+子プロセスにコピーする。
+この処理を行うことができるのは、子プロセスに通常は配送されるはずで
+トレーサに捕捉されたシグナルについてだけである。
+これらの通常のシグナルと
.BR ptrace ()
-¼«¿È¤¬È¯À¸¤¹¤ë¥·¥°¥Ê¥ë¤ò¸«Ê¬¤±¤ë¤Î¤ÏÆñ¤·¤¤¤«¤â¤·¤ì¤Ê¤¤¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+自身が発生するシグナルを見分けるのは難しいかもしれない。
+(\fIaddr\fP は無視される。)
.TP
.\"O .BR PTRACE_SETOPTIONS " (since Linux 2.4.6; see BUGS for caveats)"
-.BR PTRACE_SETOPTIONS " (Linux 2.4.6 °Ê¹ß; ¥Ð¥°¤Î¾Ï¤Ë¤¢¤ë·Ù¹ð¤â»²¾È)"
+.BR PTRACE_SETOPTIONS " (Linux 2.4.6 以降; バグの章にある警告も参照)"
.\"O Sets ptrace options from \fIdata\fP in the parent.
.\"O (\fIaddr\fP is ignored.)
.\"O \fIdata\fP is interpreted
.\"O as a bit mask of options, which are specified by the following flags:
-¿Æ¥×¥í¥»¥¹¤Î \fIdata\fP ¤Ë´ð¤Å¤¤¤Æ ptrace ¤Î¥ª¥×¥·¥ç¥ó¤òÀßÄꤹ¤ë
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë)¡£
-\fIdata\fP ¤Ï¥ª¥×¥·¥ç¥ó¤Î¥Ó¥Ã¥È¥Þ¥¹¥¯¤È¤·¤Æ²ò¼á¤µ¤ì¡¢
-¥ª¥×¥·¥ç¥ó¤Ë¤Ï°Ê²¼¤Î¥Õ¥é¥°¤ò»ØÄê¤Ç¤¤ë:
+親プロセスの \fIdata\fP に基づいて ptrace のオプションを設定する
+(\fIaddr\fP は無視される)。
+\fIdata\fP はオプションのビットマスクとして解釈され、
+オプションには以下のフラグを指定できる:
.RS
.TP
.\"O .BR PTRACE_O_TRACESYSGOOD " (since Linux 2.4.6)"
-.BR PTRACE_O_TRACESYSGOOD " (Linux 2.4.6 °Ê¹ß)"
+.BR PTRACE_O_TRACESYSGOOD " (Linux 2.4.6 以降)"
.\"O When delivering syscall traps, set bit 7 in the signal number
.\"O (i.e., deliver \fISIGTRAP | 0x80\fP).
.\"O This makes it easy for the tracer to tell the difference
.\"O between normal traps and those caused by a syscall.
.\"O .RB ( PTRACE_O_TRACESYSGOOD
.\"O may not work on all architectures.)
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î¥È¥é¥Ã¥×¤¬ÇÛÁ÷¤µ¤ì¤¿¤È¤¤Ë¡¢¥·¥°¥Ê¥ëÈÖ¹æ¤Î¥Ó¥Ã¥È 7
-¤òÀßÄꤹ¤ë (¤¹¤Ê¤ï¤Á¡¢\fISIGTRAP | 0x80\fP ¤òÇÛÁ÷¤¹¤ë)¡£
-¤³¤ì¤Ë¤è¤ê¡¢¥È¥ì¡¼¥µ¤¬Ä̾ï¤Î¥È¥é¥Ã¥×¤È¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ë¤è¤ë¥È¥é¥Ã¥×¤ò
-¶èÊ̤·¤ä¤¹¤¯¤Ê¤ë¡£
+システムコールのトラップが配送されたときに、シグナル番号のビット 7
+を設定する (すなわち、\fISIGTRAP | 0x80\fP を配送する)。
+これにより、トレーサが通常のトラップとシステムコールによるトラップを
+区別しやすくなる。
.RB ( PTRACE_O_TRACESYSGOOD
-¤Ï¤É¤Î¥¢¡¼¥¥Æ¥¯¥Á¥ã¤Ç¤âÆ°ºî¤·¤Ê¤¤²ÄǽÀ¤¬¤¢¤ë¡£)
+はどのアーキテクチャでも動作しない可能性がある。)
.TP
.\"O .BR PTRACE_O_TRACEFORK " (since Linux 2.5.46)"
-.BR PTRACE_O_TRACEFORK " (Linux 2.5.46 °Ê¹ß)"
+.BR PTRACE_O_TRACEFORK " (Linux 2.5.46 以降)"
.\"O Stop the child at the next
.\"O .BR fork (2)
.\"O call with \fISIGTRAP | PTRACE_EVENT_FORK\ <<\ 8\fP and automatically
.\"O .BR SIGSTOP .
.\"O The PID for the new process can be retrieved with
.\"O .BR PTRACE_GETEVENTMSG .
-¼¡¤Î
+次の
.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
.\"O .BR PTRACE_O_TRACEVFORK " (since Linux 2.5.46)"
-.BR PTRACE_O_TRACEVFORK " (Linux 2.5.46 °Ê¹ß)"
+.BR PTRACE_O_TRACEVFORK " (Linux 2.5.46 以降)"
.\"O Stop the child at the next
.\"O .BR vfork (2)
.\"O call with \fISIGTRAP | PTRACE_EVENT_VFORK\ <<\ 8\fP and automatically start
.\"O .BR SIGSTOP .
.\"O The PID for the new process can be retrieved with
.\"O .BR PTRACE_GETEVENTMSG .
-¼¡¤Î
+次の
.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
.\"O .BR PTRACE_O_TRACECLONE " (since Linux 2.5.46)"
-.BR PTRACE_O_TRACECLONE " (Linux 2.5.46 °Ê¹ß)"
+.BR PTRACE_O_TRACECLONE " (Linux 2.5.46 以降)"
.\"O Stop the child at the next
.\"O .BR clone (2)
.\"O call with \fISIGTRAP | PTRACE_EVENT_CLONE\ <<\ 8\fP and automatically start
.\"O if
.\"O .B PTRACE_O_TRACEFORK
.\"O is set.
-¼¡¤Î
+次の
.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
.\"O .BR PTRACE_O_TRACEEXEC " (since Linux 2.5.46)"
-.BR PTRACE_O_TRACEEXEC " (Linux 2.5.46 °Ê¹ß)"
+.BR PTRACE_O_TRACEEXEC " (Linux 2.5.46 以降)"
.\"O Stop the child at the next
.\"O .BR execve (2)
.\"O call with \fISIGTRAP | PTRACE_EVENT_EXEC\ <<\ 8\fP.
-¼¡¤Î
+次の
.BR execve (2)
-¸Æ¤Ó½Ð¤·»þ¤Ë
+呼び出し時に
\fISIGTRAP | PTRACE_EVENT_EXEC\ <<\ 8\fP
-¤Ç»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¤ë¡£
+で子プロセスの動作を停止させる。
.TP
.\"O .BR PTRACE_O_TRACEVFORKDONE " (since Linux 2.5.60)"
-.BR PTRACE_O_TRACEVFORKDONE " (Linux 2.5.60 °Ê¹ß)"
+.BR PTRACE_O_TRACEVFORKDONE " (Linux 2.5.60 以降)"
.\"O Stop the child at the completion of the next
.\"O .BR vfork (2)
.\"O call with \fISIGTRAP | PTRACE_EVENT_VFORK_DONE\ <<\ 8\fP.
-¼¡¤Î
+次の
.BR vfork (2)
-¸Æ¤Ó½Ð¤·»þ¤Ë
+呼び出し時に
\fISIGTRAP | PTRACE_EVENT_VFORK_DONE\ <<\ 8\fP
-¤Ç»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¤ë¡£
+で子プロセスの動作を停止させる。
.TP
.\"O .BR PTRACE_O_TRACEEXIT " (since Linux 2.5.60)"
-.BR PTRACE_O_TRACEEXIT " (Linux 2.5.60 °Ê¹ß)"
+.BR PTRACE_O_TRACEEXIT " (Linux 2.5.60 以降)"
.\"O Stop the child at exit with \fISIGTRAP | PTRACE_EVENT_EXIT\ <<\ 8\fP.
.\"O The child's exit status can be retrieved with
.\"O .BR PTRACE_GETEVENTMSG .
.\"O is finished exiting.
.\"O Even though context is available, the tracer cannot prevent the exit from
.\"O happening at this point.
-½ªÎ» (exit) »þ¤Ë \fISIGTRAP | PTRACE_EVENT_EXIT\ <<\ 8\fP
-¤Ç»Ò¥×¥í¥»¥¹¤ÎÆ°ºî¤òÄä»ß¤µ¤»¤ë¡£»Ò¥×¥í¥»¥¹¤Î½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤Ï
+終了 (exit) 時に \fISIGTRAP | PTRACE_EVENT_EXIT\ <<\ 8\fP
+で子プロセスの動作を停止させる。子プロセスの終了ステータスは
.B PTRACE_GETEVENTMSG
-¤Ç¼èÆÀ¤Ç¤¤ë¡£
-¤³¤ÎÄä»ß¤Ï¥ì¥¸¥¹¥¿¤¬¤Þ¤À»²¾È²Äǽ¤Ç¤¢¤ë¥×¥í¥»¥¹½ªÎ»½èÍý¤Î½é´ü¤Ë¹Ô¤ï¤ì¡¢
-¥È¥ì¡¼¥µ¤Ï¤É¤³¤Ç½ªÎ»¤¬È¯À¸¤·¤¿¤«¤òÃΤ뤳¤È¤¬¤Ç¤¤ë¡£
-Ä̾ï¤Î½ªÎ»ÄÌÃÎ (exit notification) ¤Ï¥×¥í¥»¥¹¤Î½ªÎ»½èÍý¤¬´°Î»¤·¤¿¸å¤Ë
-¹Ô¤ï¤ì¤ë¡£¥³¥ó¥Æ¥¥¹¥È¤ò»²¾È¤¹¤ë¤³¤È¤Ï¤Ç¤¤ë¤Ë¤â´Ø¤ï¤é¤º¡¢
-¥È¥ì¡¼¥µ¤Ï¤³¤Î»þÅÀ¤«¤é½ªÎ»¤ò»ß¤á¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡£
+で取得できる。
+この停止はレジスタがまだ参照可能であるプロセス終了処理の初期に行われ、
+トレーサはどこで終了が発生したかを知ることができる。
+通常の終了通知 (exit notification) はプロセスの終了処理が完了した後に
+行われる。コンテキストを参照することはできるにも関わらず、
+トレーサはこの時点から終了を止めることはできない。
.RE
.TP
.\"O .BR PTRACE_GETEVENTMSG " (since Linux 2.5.46)"
-.BR PTRACE_GETEVENTMSG " (Linux 2.5.46 °Ê¹ß)"
+.BR PTRACE_GETEVENTMSG " (Linux 2.5.46 以降)"
.\"O Retrieve a message (as an
.\"O .IR "unsigned long" )
.\"O about the ptrace event
.\"O for
.\"O .BR PTRACE_EVENT_VFORK_DONE .
.\"O (\fIaddr\fP is ignored.)
-ȯÀ¸¤·¤¿¤Ð¤«¤ê¤Î ptrace ¥¤¥Ù¥ó¥È¤Ë´Ø¤¹¤ë¥á¥Ã¥»¡¼¥¸¤ò
+発生したばかりの 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
.\"O Restarts the stopped child process.
.\"O Thus, for example, the parent can control
.\"O whether a signal sent to the child is delivered or not.
.\"O (\fIaddr\fP is ignored.)
-Ää»ß¤·¤¿»Ò¥×¥í¥»¥¹¤Î¼Â¹Ô¤òºÆ³«¤µ¤»¤ë¡£
-\fIdata\fP ¤¬¥¼¥í¤Ç¤Ê¤¯¡¢
+停止した子プロセスの実行を再開させる。
+\fIdata\fP がゼロでなく、
.B SIGSTOP
-¤Ç¤â¤Ê¤±¤ì¤Ð¡¢
-»Ò¥×¥í¥»¥¹¤ËÇÛÁ÷¤µ¤ì¤ë¥·¥°¥Ê¥ë¤È²ò¼á¤µ¤ì¤ë¡£
-¥¼¥í¤ä
+でもなければ、
+子プロセスに配送されるシグナルと解釈される。
+ゼロや
.B SIGSTOP
-¤Î¾ì¹ç¤Ï¥·¥°¥Ê¥ë¤ÏÇÛÁ÷¤µ¤ì¤Ê¤¤¡£
-¤³¤ì¤ò»È¤¦¤È¡¢Î㤨¤Ð¡¢¿Æ¥×¥í¥»¥¹¤Ï
-»Ò¥×¥í¥»¥¹¤ËÁ÷¤é¤ì¤¿¥·¥°¥Ê¥ë¤ò¼ÂºÝ¤ËÇÛÁ÷¤¹¤ë¤«¤É¤¦¤«¤ò
-À©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+の場合はシグナルは配送されない。
+これを使うと、例えば、親プロセスは
+子プロセスに送られたシグナルを実際に配送するかどうかを
+制御することができる。(\fIaddr\fP は無視される。)
.TP
.BR PTRACE_SYSCALL ", " PTRACE_SINGLESTEP
.\"O Restarts the stopped child as for
.\"O .BR PTRACE_CONT .
.\"O (\fIaddr\fP is ignored.)
.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
.\"O .BR PTRACE_SYSEMU ", " PTRACE_SYSEMU_SINGLESTEP " (since Linux 2.6.14)"
-.BR PTRACE_SYSEMU ", " PTRACE_SYSEMU_SINGLESTEP " (Linux 2.6.14 °Ê¹ß)"
+.BR PTRACE_SYSEMU ", " PTRACE_SYSEMU_SINGLESTEP " (Linux 2.6.14 以降)"
.\"O For
.\"O .BR PTRACE_SYSEMU ,
.\"O continue and stop on entry to the next syscall,
.\"O (\fIaddr\fP is ignored;
.\"O not supported on all architectures.)
.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
.\"O Sends the child a
.\"O .B SIGKILL
.\"O to terminate it.
.\"O (\fIaddr\fP and \fIdata\fP are ignored.)
-»Ò¥×¥í¥»¥¹¤Ë
+子プロセスに
.B SIGKILL
-¤òÁ÷¤ê½ªÎ»¤µ¤»¤ë¡£(\fIaddr\fP ¤È \fIdata\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+を送り終了させる。(\fIaddr\fP と \fIdata\fP は無視される。)
.TP
.B PTRACE_ATTACH
.\"O Attaches to the process specified in
.\"O to wait for the child to stop.
.\"O (\fIaddr\fP and \fIdata\fP are ignored.)
.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
.\"O Restarts the stopped child as for
.\"O tracing.
.\"O (\fIaddr\fP is ignored.)
.B PTRACE_CONT
-¤ÈƱÍͤËÄä»ß¤·¤¿»Ò¥×¥í¥»¥¹¤òºÆ³«¤¹¤ë¡£¤¿¤À¤·
-¤Þ¤º¤½¤Î¥×¥í¥»¥¹¤«¤é¤ÎʬΥ (detach) ¤ò¹Ô¤¤¡¢
+と同様に停止した子プロセスを再開する。ただし
+まずそのプロセスからの分離 (detach) を行い、
.B PTRACE_ATTACH
-¤Ç¤Î¿Æ¤ÎÀڤ괹¤¨¤Ë¤è¤ë¸ú²Ì¤È
+での親の切り換えによる効果と
.B PTRACE_TRACEME
-¤Î¸ú²Ì¤ò¼è¤ê¾Ã¤¹¡£°Õ¿Þ¤·¤¿¤â¤Î¤Ç¤Ï¤Ê¤¤¤À¤í¤¦¤¬¡¢
-Linux ¤Ç¤Ï¡¢¥È¥ì¡¼¥¹¤µ¤ì¤Æ¤¤¤ë»Ò¥×¥í¥»¥¹¤Ï¤É¤Î¤è¤¦¤ÊÊýË¡¤Ç¥È¥ì¡¼¥¹¤ò
-³«»Ï¤µ¤ì¤¿¤È¤·¤Æ¤â¡¢¤³¤ÎÊýË¡¤ÇʬΥ (detach) ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
-(\fIaddr\fP ¤Ï̵»ë¤µ¤ì¤ë¡£)
+の効果を取り消す。意図したものではないだろうが、
+Linux では、トレースされている子プロセスはどのような方法でトレースを
+開始されたとしても、この方法で分離 (detach) することができる。
+(\fIaddr\fP は無視される。)
.\"O .SH "RETURN VALUE"
-.SH ÊÖ¤êÃÍ
+.SH 返り値
.\"O On success,
.\"O .B PTRACE_PEEK*
.\"O requests return the requested data,
.\"O request may be \-1, the caller must check
.\"O .I errno
.\"O after such requests to determine whether or not an error occurred.
-À®¸ù¤¹¤ë¤È¡¢
+成功すると、
.B PTRACE_PEEK*
-¤Î¾ì¹ç¤ÏÍ׵ᤷ¤¿¥Ç¡¼¥¿¤òÊÖ¤·¡¢
-¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï 0 ¤òÊÖ¤¹¡£
-¥¨¥é¡¼¤Î¾ì¹ç¤Ï \-1 ¤òÊÖ¤·¡¢
+の場合は要求したデータを返し、
+それ以外の場合は 0 を返す。
+エラーの場合は \-1 を返し、
.I errno
-¤¬Å¬ÀÚ¤ËÀßÄꤵ¤ì¤ë¡£
+が適切に設定される。
.B PTRACE_PEEK*
-¤¬À®¸ù¤·¤ÆÊÖ¤¹Ãͤ⡡\-1 ¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ë¤¿¤á¡¢
-¤½¤Î¤è¤¦¤ÊÍ×µá¤Î¾ì¹ç¤Ë¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ¤Ï
+が成功して返す値も \-1 になることがあるため、
+そのような要求の場合には、呼び出し元は
.I errno
-¤òÄ´¤Ù¡¢¥¨¥é¡¼¤«È¯À¸¤·¤¿¤Î¤«¤É¤¦¤«¤òȽÃǤ·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+を調べ、エラーか発生したのかどうかを判断しなければならない。
.\"O .SH ERRORS
-.SH ¥¨¥é¡¼
+.SH ã\82¨ã\83©ã\83¼
.TP
.B EBUSY
.\"O (i386 only) There was an error with allocating or freeing a debug
.\"O register.
-(i386 ¤Î¤ß) ¥Ç¥Ð¥Ã¥°¥ì¥¸¥¹¥¿¤Î³ÎÊݤޤ¿¤Ï²òÊü¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤¿¡£
+(i386 のみ) デバッグレジスタの確保または解放でエラーが発生した。
.TP
.B EFAULT
.\"O There was an attempt to read from or write to an invalid area in
.\"O or
.\"O .B EFAULT
.\"O more or less arbitrarily.
-¿Æ¥×¥í¥»¥¹¤Þ¤¿¤Ï»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤ÎÉÔÀµ¤ÊÎΰè¤ËÆɤ߽ñ¤¤·¤è¤¦¤È¤·¤¿¡£
-¤ª¤½¤é¤¯¤½¤ÎÎΰ褬¥Þ¥Ã¥Ô¥ó¥°¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¡¢
-¤½¤ÎÎΰè¤Ø¤Î¥¢¥¯¥»¥¹¤¬µö¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¤Ç¤¢¤ë¡£
-ÉÔ±¿¤Ê¤³¤È¤Ë¡¢Linux ¤Ç¤Ï¤³¤Î¤è¤¦¤Ê¥¨¥é¡¼¤Î¾ì¹ç¡¢Â¿¤«¤ì¾¯¤Ê¤«¤ì
-×ó°ÕŪ¤Ë
+親プロセスまたは子プロセスのメモリの不正な領域に読み書きしようとした。
+おそらくその領域がマッピングされていないか、
+その領域へのアクセスが許されていないかである。
+不運なことに、Linux ではこのようなエラーの場合、多かれ少なかれ
+恣意的に
.B EIO
-¤òÊÖ¤·¤¿¤ê
+を返したり
.B EFAULT
-¤òÊÖ¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤¢¤ë¡£
+を返したりすることがある。
.TP
.B EINVAL
.\"O An attempt was made to set an invalid option.
-ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó¤òÀßÄꤷ¤è¤¦¤È¤·¤¿¡£
+不正なオプションを設定しようとした。
.TP
.B EIO
.\"O \fIrequest\fP is invalid, or an attempt was made to read from or
.\"O write to an invalid area in the parent's or child's memory,
.\"O or there was a word-alignment violation,
.\"O or an invalid signal was specified during a restart request.
-\fIrequest\fP ¤¬ÉÔÀµ¤Ç¤¢¤ë¡£
-¤Þ¤¿¤Ï¡¢¿Æ¥×¥í¥»¥¹¤Þ¤¿¤Ï»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
-ÉÔÀµ¤ÊÎΰè¤ËÆɤ߽ñ¤¤·¤è¤¦¤È¤·¤¿¡£
-¤Þ¤¿¤Ï¡¢¥ï¡¼¥É¶³¦°ãÈ¿¤¬¤¢¤Ã¤¿¡£
-¤Þ¤¿¤Ï¡¢¼Â¹ÔºÆ³«¤ÎÍ×µá¤ÇÉÔÀµ¤Ê¥·¥°¥Ê¥ë¤ò»ØÄꤷ¤¿¡£
+\fIrequest\fP が不正である。
+または、親プロセスまたは子プロセスのメモリの
+不正な領域に読み書きしようとした。
+または、ワード境界違反があった。
+または、実行再開の要求で不正なシグナルを指定した。
.TP
.B EPERM
.\"O The specified process cannot be traced.
.\"O Alternatively, the process may already be being traced, or be
.\"O .BR init (8)
.\"O (PID 1).
-»ØÄꤷ¤¿¥×¥í¥»¥¹¤ò¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¡£¤³¤ì¤Ï¿Æ¥×¥í¥»¥¹¤¬
-ɬÍפʸ¢¸Â (ɬÍפʥ±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤Ï
+指定したプロセスをトレースすることができない。これは親プロセスが
+必要な権限 (必要なケーパビリティは
.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
.\"O The specified process does not exist, or is not currently being traced
.\"O by the caller, or is not stopped (for requests that require that).
-»ØÄꤷ¤¿¥×¥í¥»¥¹¤¬Â¸ºß¤·¤Ê¤¤¡£
-¤Þ¤¿¤Ï¡¢»ØÄꤷ¤¿¥×¥í¥»¥¹¤Ï¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤¬
-¸½ºß¥È¥ì¡¼¥¹Ãæ¤Î»Ò¥×¥í¥»¥¹¤Ç¤Ï¤Ê¤¤¡£
-¤Þ¤¿¤Ï¡¢»ØÄꤷ¤¿¥×¥í¥»¥¹¤¬Ää»ß¤·¤Æ¤¤¤Ê¤¤ (Ää»ß¤·¤Æ¤¤¤ë¤³¤È¤¬É¬ÍפÊÍ×µá¤Î¾ì¹ç)¡£
+指定したプロセスが存在しない。
+または、指定したプロセスは呼び出したプロセスが
+現在トレース中の子プロセスではない。
+または、指定したプロセスが停止していない (停止していることが必要な要求の場合)。
.\"O .SH "CONFORMING TO"
-.SH ½àµò
+.SH 準拠
SVr4, 4.3BSD.
.\"O .SH NOTES
-.SH Ãí°Õ
+.SH 注意
.\"O Although arguments to
.\"O .BR ptrace ()
.\"O are interpreted according to the prototype given,
.\"O .BR gcc (1)
.\"O behavior.
.BR ptrace ()
-¤Î°ú¤¿ô¤Ï¾å¤Î¤è¤¦¤Ê¥×¥í¥È¥¿¥¤¥×¤Ë´ð¤Å¤¤¤Æ²ò¼á¤µ¤ì¤ë¤¬¡¢
-glibc ¤Ç¤Ï¡¢¸½ºß¤Î¤È¤³¤í
+の引き数は上のようなプロトタイプに基づいて解釈されるが、
+glibc では、現在のところ
.BR ptrace ()
-¤Ï \fIrequest\fP °ú¤¿ô¤À¤±¤¬¸ÇÄê¤Î²ÄÊÑĹ°ú¤¿ô´Ø¿ô¤È¤·¤Æ
-Àë¸À¤µ¤ì¤Æ¤¤¤ë¡£
-¤³¤ì¤ÏɬÍפʤ±¤ì¤Ð»Ä¤ê¤Î°ú¤¿ô¤Ï¾Êά²Äǽ¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¤¬¡¢
-¤½¤ì¤Ï
+は \fIrequest\fP 引き数だけが固定の可変長引き数関数として
+宣言されている。
+これは必要なければ残りの引き数は省略可能であることを意味するが、
+それは
.BR gcc (1)
-¤ÎÌÀʸ²½¤µ¤ì¤Æ¤¤¤Ê¤¤Æ°ºî¤òÍøÍѤ·¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ë¡£
+の明文化されていない動作を利用していることになる。
.LP
.\"O .BR init (8),
.\"O the process with pid 1, may not be traced.
.BR init (8)
-¤¹¤Ê¤ï¤Á PID ¤¬ 1 ¤Î¥×¥í¥»¥¹¤Ï¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¡£
+すなわち PID が 1 のプロセスはトレースすることができない。
.LP
.\"O The layout of the contents of memory and the USER area are quite OS- and
.\"O architecture-specific.
-¥á¥â¥ê¤ä USER Îΰè¤ÎÆâÍƤäÇÛÃÖ¤Ï OS ¤´¤È¡¢¥¢¡¼¥¥Æ¥¯¥Á¥ã¤´¤È¤Ë
-Èó¾ï¤Ë°Í¸¤¹¤ë¡£
+メモリや USER 領域の内容や配置は OS ごと、アーキテクチャごとに
+非常に依存する。
.\"O The offset supplied, and the data returned,
.\"O might not entirely match with the definition of
.\"O .IR "struct user" .
.\"O .\" See http://lkml.org/lkml/2008/5/8/375
-¥ª¥Õ¥»¥Ã¥È¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢ÊÖ¤µ¤ì¤ë¥Ç¡¼¥¿¤Ï
+オフセットが指定された場合、返されるデータは
.I "struct user"
-¤ÎÄêµÁ¤È´°Á´¤Ë°ìÃפ·¤Ê¤¤¤³¤È¤â¤¢¤ê¤¨¤ë¡£
-.\" http://lkml.org/lkml/2008/5/8/375 »²¾È¡£
+の定義と完全に一致しないこともありえる。
+.\" http://lkml.org/lkml/2008/5/8/375 参照。
.LP
.\"O The size of a "word" is determined by the OS variant
.\"O (e.g., for 32-bit Linux it is 32 bits, etc.).
-¡Ö¥ï¡¼¥É (word) ¡×¤ÎÂ礤µ¤Ï OS ¤Ë¤è¤Ã¤Æ·è¤Þ¤ë¡£
-(Î㤨¤Ð¡¢32 ¥Ó¥Ã¥È¤Î Linux ¤Ç¤Ï 32 ¥Ó¥Ã¥È¤Ç¤¢¤ë¡¢¤Ê¤É¡£)
+「ワード (word) 」の大きさは OS によって決まる。
+(例えば、32 ビットの Linux では 32 ビットである、など。)
.LP
.\"O Tracing causes a few subtle differences in the semantics of
.\"O traced processes.
.\"O .BR wait (2)
.\"O when it stops, and there is no way for the new parent to
.\"O effectively simulate this notification.
-¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥È¥ì¡¼¥¹¤µ¤ì¤ë¥×¥í¥»¥¹¤ÎÆ°ºî¤Ëº³ºÙ¤Ê°ã¤¤¤¬
-µ¯¤³¤ë¤³¤È¤¬¤¢¤ë¡£Î㤨¤Ð¡¢¥×¥í¥»¥¹¤¬
+トレースすることによってトレースされるプロセスの動作に些細な違いが
+起こることがある。例えば、プロセスが
.B PTRACE_ATTACH
-¤Ë¤è¤Ã¤ÆÀܳ¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¥×¥í¥»¥¹¤¬Ää»ß¤·¤¿»þ¤Ç¤âËÜÍè¤Î¿Æ¤Ï
+によって接続された場合には、そのプロセスが停止した時でも本来の親は
.BR wait (2)
-¤ò»È¤Ã¤ÆÄÌÃΤò¼õ¤±¤ë¤³¤È¤¬¤Ç¤¤º¡¢¿·¤·¤¤¿Æ¤¬¸úΨ¤è¤¯
-¤³¤ÎÄÌÃΤò¿¿»÷¤ëÊýË¡¤â¤Ê¤¤¡£
+を使って通知を受けることができず、新しい親が効率よく
+この通知を真似る方法もない。
.LP
.\"O When the parent receives an event with
.\"O .B PTRACE_EVENT_*
.\"O .B SIGKILL
.\"O signal can be used instead to kill the child process
.\"O after receiving one of these messages.
-¿Æ¥×¥í¥»¥¹¤¬
+親プロセスが
.B PTRACE_EVENT_*
-¤¬¥»¥Ã¥È¤µ¤ì¤¿¥¤¥Ù¥ó¥È¤ò¼õ¿®¤·¤¿¾ì¹ç¡¢
-»Ò¥×¥í¥»¥¹¤ÏÄ̾ïÄ̤ê¤Î¥·¥°¥Ê¥ëÇÛÁ÷¤¬¹Ô¤ï¤ì¤ë¾õÂ֤ˤʤ¤¡£
-¤Ä¤Þ¤ê¡¢¿Æ¥×¥í¥»¥¹¤¬¡¢
-¥·¥°¥Ê¥ë¤Ë¤è¤ê
+がセットされたイベントを受信した場合、
+子プロセスは通常通りのシグナル配送が行われる状態にない。
+つまり、親プロセスが、
+シグナルにより
.BR ptrace (PTRACE_CONT)
-¤ò¹Ô¤Ã¤¿¤ê¡¢
+を行ったり、
.BR ptrace (PTRACE_KILL)
-¤ò¹Ô¤Ã¤¿¤ê¤Ç¤¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£
-¤³¤é¤é¤Î¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®¸å¤Ï¡¢»Ò¥×¥í¥»¥¹¤ò½ªÎ» (kill) ¤¹¤ë¤Î¤Ë¡¢
-¥·¥°¥Ê¥ë
+を行ったりできないということである。
+こららのメッセージの受信後は、子プロセスを終了 (kill) するのに、
+シグナル
.B SIGKILL
-¤ò»ØÄꤷ¤Æ
+を指定して
.BR kill (2)
-¤ò¹Ô¤¦ÊýË¡¤òÂå¤ï¤ê¤Ë»ÈÍѤǤ¤ë¡£
+を行う方法を代わりに使用できる。
.LP
.\"O This page documents the way the
.\"O .BR ptrace ()
.\"O In any case, use of
.\"O .BR ptrace ()
.\"O is highly OS- and architecture-specific.
-¤³¤Î¥Þ¥Ë¥å¥¢¥ë¤Ï¸½ºß¤Î Linux ¤Ë¤ª¤±¤ë
+このマニュアルは現在の Linux における
.BR ptrace ()
-¥³¡¼¥ë¤ÎÆ°ºî¤Ë¤Ä¤¤¤Æµ½Ò¤·¤Æ¤¤¤ë¡£Â¾¤Î UNIX ¤Ç¤Ï
-¤½¤ÎÆ°ºî¤ÏÃø¤·¤¯°Û¤Ê¤ë¡£
-¤¤¤«¤Ê¤ë¾ì¹ç¤â
+コールの動作について記述している。他の UNIX では
+その動作は著しく異なる。
+いかなる場合も
.BR ptrace ()
-¤ò»È¤¦¤È OS ¤ä¥¢¡¼¥¥Æ¥¯¥Á¥ã¤ËÈó¾ï¤Ë°Í¸¤·¤¿¤â¤Î¤Ë¤Ê¤ë¡£
+を使うと OS やアーキテクチャに非常に依存したものになる。
.LP
.\"O The SunOS man page describes
.\"O .BR ptrace ()
.\"O present in Solaris 2 implements a superset of
.\"O .BR ptrace ()
.\"O functionality in a more powerful and uniform way.
-SunOS ¤Î¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸¤Ë¤Ï
+SunOS のマニュアル・ページには
.BR ptrace ()
-¤Ï¡ÖÆÈÆäÇÉԲIJò¡×¤Èµ½Ò¤µ¤ì¤Æ¤ª¤ê¡¢¤Þ¤µ¤·¤¯¤½¤¦¤Ç¤¢¤ë¡£
-Solaris 2 ¤Ç¤Ï proc ¥Ù¡¼¥¹¤Î
-¥Ç¥Ð¥Ã¥°¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¤·¤Æ
+は「独特で不可解」と記述されており、まさしくそうである。
+Solaris 2 では proc ベースの
+デバッグのインターフェースとして
.BR ptrace ()
-¤Î¾å°Ì¸ß´¹´Ø¿ô¤¬¼ÂÁõ¤µ¤ì¡¢¤è¤ê¶¯ÎϤǰì´ÓÀ¤Î¤¢¤ë¤â¤Î¤È¤Ê¤Ã¤Æ¤¤¤ë¡£
+の上位互換関数が実装され、より強力で一貫性のあるものとなっている。
.\"O .SH BUGS
-.SH ¥Ð¥°
+.SH ã\83\90ã\82°
.\"O On hosts with 2.6 kernel headers,
.\"O .B PTRACE_SETOPTIONS
.\"O is declared
.\"O to
.\"O .BR PTRACE_OLDSETOPTIONS ,
.\"O if that is defined.
-¥«¡¼¥Í¥ë 2.6 ¤Î¥Ø¥Ã¥À¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿¥Û¥¹¥È¤Ç¤Ï¡¢
+カーネル 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
-¤ËÄêµÁ¤·Ä¾¤¹¤³¤È¤ÇÂнè¤Ç¤¤ë¡£
+に定義し直すことで対処できる。
.\"O .SH "SEE ALSO"
-.SH ´ØÏ¢¹àÌÜ
+.SH 関連項目
.BR gdb (1),
.BR strace (1),
.BR execve (2),