1. 程式人生 > >Wait4 & Ptrace & 程序除錯 & 子程序狀態獲取 筆記總結

Wait4 & Ptrace & 程序除錯 & 子程序狀態獲取 筆記總結

例項:父程序Ptrace跟蹤子程序,通過:

-------------------------------------------------------------------

  • pid_t wait4(pid_t pid, int *statloc, int options, struct rusage *rusage);

statloc 子程序程序狀態(exited,stoped, signaled)

options wait的執行方式:阻塞等

rusage 子程序的當前資訊:參考 http://os.chinaunix.net/a2008/1229/989/000000989521.shtml   (獲取程序執行的使用者空間和核心空間的時間,程序佔用記憶體資訊等)

---------------------------------------------------------------------------

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

Request引數決定了系統呼叫的功能:

PTRACE_TRACEME

本程序被其父程序所跟蹤。其父程序應該希望跟蹤子程序。

PTRACE_PEEKTEXT, PTRACE_PEEKDATA

從記憶體地址中讀取一個位元組,記憶體地址由addr給出。

PTRACE_PEEKUSR

從USER區域中讀取一個位元組,偏移量為addr。

PTRACE_POKETEXT, PTRACE_POKEDATA

往記憶體地址中寫入一個位元組。記憶體地址由addr給出。

PTRACE_POKEUSR

往USER區域中寫入一個位元組。偏移量為addr。

PTRACE_SYSCALL, PTRACE_CONT

重新執行。

PTRACE_KILL

殺掉子程序,使它退出。

PTRACE_SINGLESTEP

設定單步執行標誌

PTRACE_ATTACH

跟蹤指定pid 程序。

PTRACE_DETACH

結束跟蹤

Intel386特有:

PTRACE_GETREGS

讀取暫存器

PTRACE_SETREGS

設定暫存器

PTRACE_GETFPREGS

讀取浮點暫存器

PTRACE_SETFPREGS

設定浮點暫存器

init程序不可以使用此函式

---------------------------------------------------------------------------

ptrace例項

http://hi.baidu.com/ordeder/item/4c31f93512e6524d3075a1b0

Ptrace詳解

http://www.cnblogs.com/catch/p/3476280.html

Ptrace引數說明

http://blog.sina.com.cn/s/blog_4ac74e9a0100n7w1.html

附件:

struct rusage {

     struct timeval ru_utime; /* user time used */

     struct timeval ru_stime; /* system time used */

     long ru_maxrss; /* maximum resident set size */

     long ru_ixrss; /* integral shared memory size */

     long ru_idrss; /* integral unshared data size */

     long ru_isrss; /* integral unshared stack size */

     long ru_minflt; /* page reclaims */

     long ru_majflt; /* page faults */

     long ru_nswap; /* swaps */

     long ru_inblock; /* block input operations */

     long ru_oublock; /* block output operations */

     long ru_msgsnd; /* messages sent */

     long ru_msgrcv; /* messages received */

     long ru_nsignals; /* signals received */

     long ru_nvcsw; /* voluntary context switches */

     long ru_nivcsw; /* involuntary context switches */

    };