Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] process accounting: take original leader's start_time in non-leader exec

The only record we have of the real-time age of a process, regardless of
execs it's done, is start_time. When a non-leader thread exec, the
original start_time of the process is lost. Things looking at the
real-time age of the process are fooled, for example the process accounting
record when the process finally dies. This change makes the oldest
start_time stick around with the process after a non-leader exec. This way
the association between PID and start_time is kept constant, which seems
correct to me.

Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Roland McGrath and committed by
Linus Torvalds
f5e90281 491d4bed

+12
+12
fs/exec.c
··· 678 678 while (leader->exit_state != EXIT_ZOMBIE) 679 679 yield(); 680 680 681 + /* 682 + * The only record we have of the real-time age of a 683 + * process, regardless of execs it's done, is start_time. 684 + * All the past CPU time is accumulated in signal_struct 685 + * from sister threads now dead. But in this non-leader 686 + * exec, nothing survives from the original leader thread, 687 + * whose birth marks the true age of this process now. 688 + * When we take on its identity by switching to its PID, we 689 + * also take its birthdate (always earlier than our own). 690 + */ 691 + current->start_time = leader->start_time; 692 + 681 693 spin_lock(&leader->proc_lock); 682 694 spin_lock(&current->proc_lock); 683 695 proc_dentry1 = proc_pid_unhash(current);