[RFC] "biological parent" pid
From: Tim Schmielau (tim_at_physik3.uni-rostock.de)
Date: 01/31/05
- Previous message: Brian King: "Re: pci: Arch hook to determine config space size"
- Next in thread: linux-os: "Re: [RFC] "biological parent" pid"
- Reply: linux-os: "Re: [RFC] "biological parent" pid"
- Reply: Michael Buesch: "Re: [RFC] "biological parent" pid"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Mon, 31 Jan 2005 22:38:41 +0100 (CET) To: lkml <linux-kernel@vger.kernel.org>
The ppid of a process is not really helpful if I want to reconstruct the
real history of processes on a machine, since it may become 1 when the
parent dies and the process is reparented to init.
I am not aware of concepts in Linux or other unices that apply to this
case. So I made up the "biological parent pid" bioppid (in contrast to the
adoptive parents pid) that just never changes.
Any user of it must of course remember that it doesn't need to be a valid
pid anymore or might even belong to a different process that was forked in
the meantime. bioppid only had to be a valid pid at time btime (it's
a (btime, pid) pair that unambiguously identifies a process).
Comments? (other that I just broke /proc/nnn/status parsing once again :-)
Tim
--- linux-2.6.10/include/linux/sched.h 2004-12-24 22:33:59.000000000 +0100
+++ linux-2.6.10-ppid/include/linux/sched.h 2005-01-31 19:20:00.000000000 +0100
@@ -556,6 +556,7 @@ struct task_struct {
unsigned did_exec:1;
pid_t pid;
pid_t tgid;
+ pid_t bioppid; /* biological parents */
/*
* pointers to (original) parent process, youngest child, younger sibling,
* older sibling, respectively. (p->father can be replaced with
--- linux-2.6.10/kernel/fork.c 2004-12-24 22:33:59.000000000 +0100
+++ linux-2.6.10-ppid/kernel/fork.c 2005-01-31 18:15:39.000000000 +0100
@@ -889,6 +889,7 @@ static task_t *copy_process(unsigned lon
p->tgid = p->pid;
if (clone_flags & CLONE_THREAD)
p->tgid = current->tgid;
+ p->bioppid = current->pid;
if ((retval = security_task_alloc(p)))
goto bad_fork_cleanup_policy;
--- linux-2.6.10/fs/proc/array.c 2004-12-24 22:35:00.000000000 +0100
+++ linux-2.6.10-ppid/fs/proc/array.c 2005-01-31 18:19:02.000000000 +0100
@@ -165,6 +165,7 @@ static inline char * task_state(struct t
"Tgid:\t%d\n"
"Pid:\t%d\n"
"PPid:\t%d\n"
+ "BioPPid:\t%d\n"
"TracerPid:\t%d\n"
"Uid:\t%d\t%d\t%d\t%d\n"
"Gid:\t%d\t%d\t%d\t%d\n",
@@ -172,6 +173,7 @@ static inline char * task_state(struct t
(p->sleep_avg/1024)*100/(1020000000/1024),
p->tgid,
p->pid, pid_alive(p) ? p->group_leader->real_parent->tgid : 0,
+ p->bioppid,
pid_alive(p) && p->ptrace ? p->parent->pid : 0,
p->uid, p->euid, p->suid, p->fsuid,
p->gid, p->egid, p->sgid, p->fsgid);
--- linux-2.6.10/kernel/acct.c 2004-12-24 22:34:58.000000000 +0100
+++ linux-2.6.10-ppid/kernel/acct.c 2005-01-31 18:19:35.000000000 +0100
@@ -446,7 +446,7 @@ static void do_acct_process(long exitcod
#endif
#if ACCT_VERSION==3
ac.ac_pid = current->tgid;
- ac.ac_ppid = current->parent->tgid;
+ ac.ac_ppid = current->bioppid;
#endif
read_lock(&tasklist_lock); /* pin current->signal */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
- Previous message: Brian King: "Re: pci: Arch hook to determine config space size"
- Next in thread: linux-os: "Re: [RFC] "biological parent" pid"
- Reply: linux-os: "Re: [RFC] "biological parent" pid"
- Reply: Michael Buesch: "Re: [RFC] "biological parent" pid"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
- Re: [PATCH 2.6.9] fork: add a hook in do_fork()
... >> What's wrong with the LSM hook already available for you to use for this ...
> Is it possible to get the parent PID and the child PID which are ... send the line
"unsubscribe linux-kernel" in ... (Linux-Kernel) - Re: How to get Parent Pid from Kernel Driver?
... NtQuerySystemInformation, I do not see any way to get the Parent Pid. ...
ULONG pid, now; ... (microsoft.public.win32.programmer.kernel) - Re: How to capture pid
... you are getting the parent pid in the perl script. ... to a separate
tty... ... (perl.beginners) - Re: How to capture pid
... you are getting the parent pid in the perl script. ... you are doing
an exec. ... (perl.beginners) - Re: How to capture pid
... >actual sample script" ... you are getting the parent pid in the perl
script. ... (perl.beginners)