现在的位置: 首页 > 综合 > 正文

Wait4 & Ptrace & 进程调试 & 子进程状态获取 笔记总结

2018年09月21日 ⁄ 综合 ⁄ 共 1837字 ⁄ 字号 评论关闭

实例:父进程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 */

    };

抱歉!评论已关闭.