怎样看父进程是哪个?

chengshiziyouren 2010-01-27 09:28:17
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <linux/user.h> /* For constants
ORIG_EAX etc */
int main()
{
pid_t child;
long orig_eax;
child = fork();
if(child == 0) {
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl("/bin/ls", "ls", NULL);
}
else {
wait(NULL);
orig_eax = ptrace(PTRACE_PEEKUSER,
child, 4 * ORIG_EAX,
NULL);
printf("The child made a "
"system call %ld ", orig_eax);
ptrace(PTRACE_CONT, child, NULL, NULL);
}
return 0;
}
请问一下这段代码的父进程是哪个进程???
...全文
293 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yayu_myself 2010-03-04
  • 打赏
  • 举报
回复
父子进程会在

child = fork()

之后一起往下执行。。

因为fork会复制当前进程的映像,所以父子进程执行的代码也完全一样

通过child值来判断当前是在父进程还是子进程。。如果是0。。则在子进程中,否则在父进程中。。

liujundykx 2010-03-02
  • 打赏
  • 举报
回复
pid_t getppid();
oluckly 2010-02-27
  • 打赏
  • 举报
回复
呵呵,你好!我也在看这段代码。但是在我机器(suse 10)上ORIG_EAX编译不通过,请问你知道什么原因吗?你那编译通过了吗?

以下摘自别人的:
说明:11是execve的系统调用号,这是该程序调用的第一个系统调用。
想知道系统调用号的详细内容,察看 /usr/include/asm/unistd.h。

在以上的示例中,父进程fork出了一个子进程,然后跟踪它。在调用exec函数之前,子进程用PTRACE_TRACEME作为第一个参数调用了ptrace函数,它告诉内核:让别人跟踪我吧!然后,在子进程调用了execve()之后,它将控制权交还给父进程。当时父进程正使用wait()函数来等待来自内核的通知,现在它得到了通知,于是它可以开始察看子进程都作了些什么,比如看看寄存器的值之类。

出现系统调用之后,内核会将eax中的值(此时存的是系统调用号)保存起来,我们可以使用PTRACE_PEEKUSER作为ptrace的第一个参数来读到这个值。
我们察看完系统调用的信息后,可以使用PTRACE_CONT作为ptrace的第一个参数,调用ptrace使子进程继续系统调用的过程。
KimenWu 2010-02-27
  • 打赏
  • 举报
回复
引用 3 楼 scott20050218 的回复:
if(child == 0) {
        ptrace(PTRACE_TRACEME, 0, NULL, NULL);
        execl("/bin/ls", "ls", NULL);
    }
子进程执行结束后,应该退出吧,exit(0);

不需要,执行完之后,返回0。因为,你的main函数最后有个返回0嘛
hitmshh 2010-01-28
  • 打赏
  • 举报
回复
if(child == 0) {
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl("/bin/ls", "ls", NULL);
}
这段代码是子进程的工作内容。下面的else是父进程的工作内容。
因为fork函数在子进程中返回值是0,父进程中的返回值是子进程的pid值,非零。
所以在子进程if判断中进入if中执行,在父进程中进入else中执行
scott20050218 2010-01-28
  • 打赏
  • 举报
回复
if(child == 0) {
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl("/bin/ls", "ls", NULL);
}
子进程执行结束后,应该退出吧,exit(0);
brookmill 2010-01-27
  • 打赏
  • 举报
回复
printf("%d\n", getppid());

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧