Bug 137519 - ps shows bad PPID
ps shows bad PPID
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 3
Classification: Red Hat
Component: kernel (Show other bugs)
3.0
All Linux
medium Severity medium
: ---
: ---
Assigned To: Ernie Petrides
Brian Brock
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2004-10-29 03:20 EDT by Keiichi Mori
Modified: 2007-11-30 17:07 EST (History)
3 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2004-10-29 20:03:05 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
sample test case (943 bytes, application/octet-stream)
2004-10-29 03:26 EDT, Keiichi Mori
no flags Details

  None (edit)
Description Keiichi Mori 2004-10-29 03:20:12 EDT
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; rv:1.7.3) Gecko/20040914
Firefox/0.10

Description of problem:
FROM IT#50994.

--- Event posted 10-06-2004 10:19pm by kmori with duration of 0.00 --- 	

[Description]
ps command shows different PPID,PID from the value returned by
getppid(),getpid().

[Environment]
RHEL3 GA, U1, U2, U3

[Steps to reproduction]
The test (uploaded here) case works as below:
ProcessA
  -- create_thread() ---> ThreadB
                            --- execl() ---> ProcessC

1. compile and execute test case
$ make
$ ./wait_2_mt
ProcessA: pid=4505, ppid=4166
ThreadB:   pid=4505, ppid=4166
ProcessC: pid=4507, ppid=4505
ProcessC: pid=4507, ppid=4505
...

2. execute ps command during test case is running.
$ ps almx
F   UID   PID  PPID PRI  NI   VSZ  RSS WCHAN  STAT TTY        TIME COMMAND
0   500  4505  4166  16   0 13440  412 schedu S    pts/1      0:00
./wait_2_mt
1   500  4506  4505  19   0 13440  412 wait4  S    pts/1      0:00
./wait_2_mt
0   500  4507  4506  15   0  2284  288 schedu S    pts/1      0:00 1

You can find the difference between the value of getpid(),getppid()
and ps's.

[Expected result]
Provide same information between getpid(),getppid() and ps.


[Additional infomation]
I found this difference happens due to below kernel implementation:

linux-2.4/kernel/timer.c::sys_getpid()
asmlinkage long sys_getpid(void)
{
       return current->tgid;
}

linux-2.4/kernel/timer.c::sys_getppid()
      parent = me->group_leader->real_parent;
      for (;;) {
              pid = parent->tgid;

linux-2.4/fs/proc/array.c::task_state()
      buffer += sprintf(buffer,
              "State:\t%s\n"
              "Tgid:\t%d\n"
              "Pid:\t%d\n"
              "PPid:\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",
              get_task_state(p), p->tgid,
              p->pid, p->pid ? p->real_parent->pid : 0, 0,
              p->uid, p->euid, p->suid, p->fsuid,
              p->gid, p->egid, p->sgid, p->fsgid);

linux-2.4/fs/proc/array.c::proc_pid_stat()
      read_lock(&tasklist_lock);
      ppid = task->pid ? task->real_parent->pid : 0;
      read_unlock(&tasklist_lock);

getpid() and getppid() return not pid but tgid.
The other hand, /proc/<pid>/{stat,status} shows not tgid but pid.

Version-Release number of selected component (if applicable):


How reproducible:
Always

Steps to Reproduce:
See above.


Expected Results:  Provide consist information between
getpid(),getppid() and ps.

Additional info:

BZ#13203 is same issue for RHEL4.
upstream kernel (2.6) has been fixed. RHEL3 kernel has also NPTL
features,then should be fixed in RHEL3, too.
Comment 1 Keiichi Mori 2004-10-29 03:26:31 EDT
Created attachment 105931 [details]
sample test case
Comment 2 Ernie Petrides 2004-10-29 20:03:05 EDT
Thank you for the report and test case.  I will coordinate my work
on this bug and its dup (135891) for U5.


*** This bug has been marked as a duplicate of 135891 ***
Comment 3 Ernie Petrides 2005-02-19 05:11:11 EST
A fix for this problem has just been committed to the RHEL3 U5
patch pool this evening (in kernel version 2.4.21-27.16.EL).
Comment 4 Tim Powers 2005-05-18 09:28:22 EDT
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHSA-2005-294.html

Note You need to log in before you can comment on or make changes to this bug.