task_struct's real_parent vs parent members
Hi, I am looking through kernel 3.2's task_struct, which has two pointers for parents: real_parent and parent (http://lxr.free-electrons.com/source/include/linux/sched.h#L1313) I would like to know why there are two pointers, and how these two differ. init_task's parent and real_parent are initialised to point to itself. Since the main way processes are created is through fork()/clone(), I tried following do_fork function to see where a newly created process's parent is set, but I am unable to find it. I see that do_fork dups the current task_struct, and only updates the new process's real_parent, depending on flags (passed via clone/fork syscall). The documentation in sched.h:1313 says that "parent" refers to the parent task that would receive SIGCHLD (i.e., the one that issues wait4()). I followed the wait4() syscall to do_wait(), I still am not able to find where the task's parent is updated. Is there something I'm missing? Thanks, -- Vimal
Hi Vimal... On Mon, Feb 27, 2012 at 03:40, Vimal <j.vimal@gmail.com> wrote:
The documentation in sched.h:1313 says that "parent" refers to the parent task that would receive SIGCHLD (i.e., the one that issues wait4()). I followed the wait4() syscall to do_wait(), I still am not able to find where the task's parent is updated.
I am bit rusty here, but AFAIK sigchld is thrown to the process who ptrace another process. CMIIW -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com
Hi Mulyadi, On 26 February 2012 23:48, Mulyadi Santosa <mulyadi.santosa@gmail.com> wrote:
I am bit rusty here, but AFAIK sigchld is thrown to the process who ptrace another process. CMIIW
sigchld's definition [1] says it's sent to the parent process when a child terminates. But I do agree that the notion of a parent seems a bit ambiguous when a process is being ptraced. ptrace is what I found when looking through some websites, and you may very well be correct. But as always, it is good to confirm through code. :) Let me try checking the ptrace functions. Thanks! -- Vimal
Hi Mulyadi, You were right. I found this code, which is called from ptrace_attach function: http://lxr.free-electrons.com/source/kernel/ptrace.c#L41 Thanks :) On 27 February 2012 08:45, Vimal <j.vimal@gmail.com> wrote:
Hi Mulyadi,
On 26 February 2012 23:48, Mulyadi Santosa <mulyadi.santosa@gmail.com> wrote:
I am bit rusty here, but AFAIK sigchld is thrown to the process who ptrace another process. CMIIW
sigchld's definition [1] says it's sent to the parent process when a child terminates.
But I do agree that the notion of a parent seems a bit ambiguous when a process is being ptraced.
ptrace is what I found when looking through some websites, and you may very well be correct. But as always, it is good to confirm through code. :) Let me try checking the ptrace functions.
Thanks! -- Vimal
-- Vimal
On Tue, Feb 28, 2012 at 03:58, Vimal <j.vimal@gmail.com> wrote:
Hi Mulyadi,
You were right. I found this code, which is called from ptrace_attach function:
Phewwww :) Like I said.... i am getting rusty :) glad to help btw :D -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com
participants (2)
-
Mulyadi Santosa -
Vimal