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 */
};