PTRACE(2)

名前
ptrace - process trace

書式
#include <sys/ptrace.h>

int ptrace(int request, int pid, int addr, int data);

説明
ptrace は親プロセス(parent process)が子プロセス(child process)の実行とそのメ モリ・イメージ(core image)を制御する方法を与える。その主要な使用法は デバック中のブレーク・ポイント(break point)の実装である。追跡するプロ セスはシグナルが発生するまで実行される。そしてそれが停止すると親プロセ スへ wait(2) で知らされる。追跡するプロセスが停止状態にある時にそのメモリを読み書き できる。親は停止させたシグナルを選択的に無視させることにより、子の実行 を続けさせることができる。

request 引き数の値がこのシステム・コールの正確な動作を決定する:

PTRACE_TRACEME
    このプロセスは親によって追跡される。親はその子を追跡する必要がある。

PTRACE_PEEKTEXT, PTRACE_PEEKDATA
    addr の位置から word を読み込む。

PTRACE_PEEKUSR
    ユーザー 領域の addr の位置から word を読み込む。

PTRACE_POKETEXT, PTRACE_POKEDATA
    addr の位置に word を書き込む。

PTRACE_POKEUSR
    ユーザー 領域の addr の位置に word を書き込む。

PTRACE_SYSCALL, PTRACE_CONT
    シグナル後に再実行する。

PTRACE_KILL
    子に SIGKILL を送り終了させる。

PTRACE_SINGLESTEP
    シングル・ステップ実行(single step)のための トラップ・フラグ(trap flag)を設定する。

PTRACE_ATTACH
    pid で指定したプロセスに接続(attach)する。

PTRACE_DETACH
    以前に接続したプロセスを分離(detach)する。

注意
init, プロセスID 1 のプロセスにはこの関数を使用できない。

返り値
成功した場合はゼロが返される。エラーの場合は -1 が返され、 errno が適切に設定される。

エラー

EPERM
    指定したプロセス は追跡できない(例 init )か、既に追跡を行なっている。

ESRCH
    指定したプロセスが存在しない。

EIO request が不正である。

準拠
SVr4, SVID EXT, AT&T, X/OPEN, BSD 4.3

関連項目
gdb(1), exec(3), signal(2), wait(2)