]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/getpid.2
tcp.7: Update info on tcp_syn_retries default value
[thirdparty/man-pages.git] / man2 / getpid.2
CommitLineData
fea681da 1.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
2297bf0e 2.\"
93015253 3.\" %%%LICENSE_START(VERBATIM)
fea681da
MK
4.\" Permission is granted to make and distribute verbatim copies of this
5.\" manual provided the copyright notice and this permission notice are
6.\" preserved on all copies.
7.\"
8.\" Permission is granted to copy and distribute modified versions of this
9.\" manual under the conditions for verbatim copying, provided that the
10.\" entire resulting derived work is distributed under the terms of a
11.\" permission notice identical to this one.
c13182ef 12.\"
fea681da
MK
13.\" Since the Linux kernel and libraries are constantly changing, this
14.\" manual page may be incorrect or out-of-date. The author(s) assume no
15.\" responsibility for errors or omissions, or for damages resulting from
16.\" the use of the information contained herein. The author(s) may not
17.\" have taken the same level of care in the production of this manual,
18.\" which is licensed free of charge, as they might when working
19.\" professionally.
c13182ef 20.\"
fea681da
MK
21.\" Formatted or processed versions of this manual, if unaccompanied by
22.\" the source, must acknowledge the copyright and authors of this work.
4b72fb64 23.\" %%%LICENSE_END
4784c377 24.\"
9ba01802 25.TH GETPID 2 2019-03-06 "Linux" "Linux Programmer's Manual"
fea681da
MK
26.SH NAME
27getpid, getppid \- get process identification
28.SH SYNOPSIS
29.B #include <sys/types.h>
30.br
31.B #include <unistd.h>
68e4db0a 32.PP
fea681da
MK
33.B pid_t getpid(void);
34.br
35.B pid_t getppid(void);
36.SH DESCRIPTION
e511ffb6 37.BR getpid ()
80b435e1 38returns the process ID (PID) of the calling process.
c13182ef 39(This is often used by
2c5f1089 40routines that generate unique temporary filenames.)
cd065c7a 41.PP
e511ffb6 42.BR getppid ()
a1ffe9f5 43returns the process ID of the parent of the calling process.
cbd17ac0
MK
44This will be either the ID of the process that created this process using
45.BR fork (),
46or, if that process has already terminated,
47the ID of the process to which this process has been reparented (either
48.BR init (1)
49or a "subreaper" process defined via the
50.BR prctl (2)
51.BR PR_SET_CHILD_SUBREAPER
52operation).
5f234475
MK
53.SH ERRORS
54These functions are always successful.
47297adb 55.SH CONFORMING TO
e4abf822 56POSIX.1-2001, POSIX.1-2008, 4.3BSD, SVr4.
67f0f50d 57.SH NOTES
da83e8a2
MK
58If the caller's parent is in a different PID namespace (see
59.BR pid_namespaces (7)),
60.BR getppid ()
61returns 0.
57c80845
MK
62.PP
63From a kernel perspective,
64the PID (which is shared by all of the threads in a multithreaded process)
65is sometimes also known as the thread group ID (TGID).
66This contrasts with the kernel thread ID (TID),
67which is unique for each thread.
68For further details, see
69.BR gettid (2)
70and the discussion of the
71.BR CLONE_THREAD
72flag in
73.BR clone (2).
da83e8a2 74.\"
0722a578 75.SS C library/kernel differences
9338d37b 76From glibc version 2.3.4 up to and including version 2.24,
67f0f50d
MK
77the glibc wrapper function for
78.BR getpid ()
9338d37b
MK
79cached PIDs,
80with the goal of avoiding additional system calls when a process calls
67f0f50d
MK
81.BR getpid ()
82repeatedly.
9338d37b
MK
83Normally this caching was invisible,
84but its correct operation relied on support in the wrapper functions for
67f0f50d
MK
85.BR fork (2),
86.BR vfork (2),
87and
88.BR clone (2):
9338d37b 89if an application bypassed the glibc wrappers for these system calls by using
67f0f50d
MK
90.BR syscall (2),
91then a call to
92.BR getpid ()
9338d37b
MK
93in the child would return the wrong value
94(to be precise: it would return the PID of the parent process).
67f0f50d
MK
95.\" The following program demonstrates this "feature":
96.\"
97.\" #define _GNU_SOURCE
98.\" #include <sys/syscall.h>
99.\" #include <sys/wait.h>
100.\" #include <stdio.h>
101.\" #include <stdlib.h>
102.\" #include <unistd.h>
103.\"
104.\" int
105.\" main(int argc, char *argv[])
106.\" {
107.\" /* The following statement fills the getpid() cache */
108.\"
109.\" printf("parent PID = %ld\n", (long) getpid());
110.\"
111.\" if (syscall(SYS_fork) == 0) {
112.\" if (getpid() != syscall(SYS_getpid))
113.\" printf("child getpid() mismatch: getpid()=%ld; "
114.\" "syscall(SYS_getpid)=%ld\n",
115.\" (long) getpid(), (long) syscall(SYS_getpid));
116.\" exit(EXIT_SUCCESS);
117.\" }
118.\" wait(NULL);
119.\"}
9338d37b 120In addition, there were cases where
67f0f50d 121.BR getpid ()
9338d37b 122could return the wrong value even when invoking
67f0f50d
MK
123.BR clone (2)
124via the glibc wrapper function.
9338d37b
MK
125(For a discussion of one such case, see BUGS in
126.BR clone (2).)
127Furthermore, the complexity of the caching code had been
128the source of a few bugs within glibc over the years.
cd065c7a 129.PP
9338d37b
MK
130Because of the aforementioned problems,
131since glibc version 2.25, the PID cache is removed:
995865aa 132.\" commit c579f48edba88380635ab98cb612030e3ed8691e
9338d37b 133.\" https://sourceware.org/glibc/wiki/Release/2.25#pid_cache_removal
995865aa 134calls to
7693d1e5 135.BR getpid ()
995865aa 136always invoke the actual system call, rather than returning a cached value.
e0ccee7f
MK
137.\" FIXME .
138.\" Review progress of https://bugzilla.redhat.com/show_bug.cgi?id=1469757
70ea1968 139.PP
03936fb4 140On Alpha, instead of a pair of
b30b425b
MK
141.BR getpid ()
142and
143.BR getppid ()
03936fb4 144system calls, a single
70ea1968
ES
145.BR getxpid ()
146system call is provided, which returns a pair of PID and parent PID.
147The glibc
148.BR getpid ()
149and
150.BR getppid ()
151wrapper functions transparently deal with this.
152See
153.BR syscall (2)
154for details regarding register mapping.
47297adb 155.SH SEE ALSO
67f0f50d 156.BR clone (2),
fea681da 157.BR fork (2),
12fe9b17 158.BR gettid (2),
fea681da
MK
159.BR kill (2),
160.BR exec (3),
161.BR mkstemp (3),
162.BR tempnam (3),
163.BR tmpfile (3),
53a1443c 164.BR tmpnam (3),
4effb5be 165.BR credentials (7),
7e0e902b 166.BR pid_namespaces (7)