[lkml]   [2010]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: PROBLEM: getpid() returning same value as getppid()
On Wed 26-05-10 11:16:51, Nick Bowler wrote:
> On 16:45 Wed 26 May , S?bastien Paumier wrote:
> > Hi,
> > here is a bug that occurs on my kernel 2.6.31-21, maybe with older ones.
> > If a C program contains a function with the constructor attribute that
> > calls getpid(), then, a call to syscall(SYS_fork) produces a son that
> > obtains the same value calling getpid() or getppid().
> The GNU C library caches the results of getpid, which is probably the
> cause of your grief. This cache relies on the glibc wrappers for fork
> and friends, which you have bypassed by using syscall directly.

man page for getpid states that explicitly:
Since glibc version 2.3.4, the glibc wrapper function for
getpid() caches PIDs, so as to avoid additional system calls when
a process calls getpid() repeatedly. Normally this caching is
invisible, but its correct operation relies on support in the
wrapper functions for fork(2), vfork(2), and clone(2):
if an application bypasses the glibc wrappers for these system
calls by using syscall(2), then a call to getpid() in the child
will return the wrong value (to be precise: it will return the
PID of the parent process). See also clone(2) for discussion
of a case where getpid() may return the wrong value even when
invoking clone(2) via the glibc wrapper function.

> --
> Nick Bowler, Elliptic Technologies (
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to
> More majordomo info at
> Please read the FAQ at

Michal Hocko
L3 team
Lihovarska 1060/12
190 00 Praha 9
Czech Republic

 \ /
  Last update: 2010-06-02 17:05    [W:0.041 / U:0.188 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site