2004-11-03 13:51:07 +00:00
|
|
|
.\" Copyright (c) 1992 Drew Eckhardt <drew@cs.colorado.edu>, March 28, 1992
|
2013-01-01 02:03:43 +00:00
|
|
|
.\" and Copyright (c) Michael Kerrisk, 2001, 2002, 2005, 2013
|
ldd.1, capget.2, clone.2, create_module.2, fallocate.2, futex.2, get_kernel_syms.2, get_thread_area.2, getcpu.2, getitimer.2, getpid.2, io_cancel.2, io_destroy.2, io_getevents.2, io_setup.2, io_submit.2, ioctl_list.2, mkdir.2, mknod.2, pciconfig_read.2, pivot_root.2, posix_fadvise.2, query_module.2, sendfile.2, set_thread_area.2, setns.2, unshare.2, __setfpucw.3, a64l.3, addseverity.3, argz_add.3, bindresvport.3, cabs.3, cacos.3, cacosh.3, canonicalize_file_name.3, carg.3, casin.3, casinh.3, catan.3, catanh.3, ccos.3, ccosh.3, cerf.3, cexp.3, cexp2.3, cimag.3, clog.3, clog10.3, clog2.3, cmsg.3, conj.3, cpow.3, cproj.3, creal.3, csin.3, csinh.3, csqrt.3, ctan.3, ctanh.3, des_crypt.3, envz_add.3, fdim.3, fma.3, fmax.3, fmemopen.3, fmin.3, fmtmsg.3, fpclassify.3, gamma.3, getpt.3, getrpcent.3, getrpcport.3, getttyent.3, isgreater.3, key_setsecret.3, lgamma.3, malloc_hook.3, mempcpy.3, nan.3, netlink.3, nextafter.3, putgrent.3, remove.3, remquo.3, rpc.3, rtime.3, rtnetlink.3, setaliasent.3, setnetgrent.3, signbit.3, significand.3, sincos.3, stdin.3, tgamma.3, xcrypt.3, xdr.3, cciss.4, hpsa.4, mouse.4, pts.4, sk98lin.4, tty_ioctl.4, wavelan.4, hosts.equiv.5, rpc.5, tzfile.5, boot.7, complex.7, ddp.7, fifo.7, futex.7, icmp.7, ip.7, ipv6.7, netdevice.7, netlink.7, packet.7, raw.7, rtnetlink.7, socket.7, tcp.7, udp.7, unix.7, x25.7, sync.8: Global fix: Put copyright info at top of page, followed by blank line and LICENSE
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-03-10 09:29:51 +00:00
|
|
|
.\"
|
ldd.1, clone.2, create_module.2, get_kernel_syms.2, get_thread_area.2, io_cancel.2, io_setup.2, io_submit.2, mkdir.2, mknod.2, query_module.2, set_thread_area.2, __setfpucw.3, hosts.equiv.5, sync.8: Added LICENSE_START(GPL_NOVERSION_ONELINE)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-03-10 09:28:51 +00:00
|
|
|
.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" May be distributed under the GNU General Public License.
|
ldd.1, clone.2, create_module.2, get_kernel_syms.2, get_thread_area.2, io_cancel.2, io_setup.2, io_submit.2, mkdir.2, mknod.2, query_module.2, set_thread_area.2, __setfpucw.3, hosts.equiv.5, sync.8: Added LICENSE_START(GPL_NOVERSION_ONELINE)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-03-10 09:28:51 +00:00
|
|
|
.\" %%%LICENSE_END
|
2013-03-12 10:57:01 +00:00
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Modified by Michael Haardt <michael@moria.de>
|
|
|
|
.\" Modified 24 Jul 1993 by Rik Faith <faith@cs.unc.edu>
|
|
|
|
.\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
|
|
|
|
.\" New man page (copied from 'fork.2').
|
|
|
|
.\" Modified 10 June 1995 by Andries Brouwer <aeb@cwi.nl>
|
|
|
|
.\" Modified 25 April 1998 by Xavier Leroy <Xavier.Leroy@inria.fr>
|
|
|
|
.\" Modified 26 Jun 2001 by Michael Kerrisk
|
|
|
|
.\" Mostly upgraded to 2.4.x
|
|
|
|
.\" Added prototype for sys_clone() plus description
|
|
|
|
.\" Added CLONE_THREAD with a brief description of thread groups
|
2007-04-12 22:42:49 +00:00
|
|
|
.\" Added CLONE_PARENT and revised entire page remove ambiguity
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" between "calling process" and "parent process"
|
|
|
|
.\" Added CLONE_PTRACE and CLONE_VFORK
|
|
|
|
.\" Added EPERM and EINVAL error codes
|
2005-05-17 15:06:30 +00:00
|
|
|
.\" Renamed "__clone" to "clone" (which is the prototype in <sched.h>)
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" various other minor tidy ups and clarifications.
|
2007-09-20 06:52:22 +00:00
|
|
|
.\" Modified 26 Jun 2001 by Michael Kerrisk <mtk.manpages@gmail.com>
|
2007-06-08 09:56:56 +00:00
|
|
|
.\" Updated notes for 2.4.7+ behavior of CLONE_THREAD
|
2007-09-20 06:52:22 +00:00
|
|
|
.\" Modified 15 Oct 2002 by Michael Kerrisk <mtk.manpages@gmail.com>
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Added description for CLONE_NEWNS, which was added in 2.4.19
|
|
|
|
.\" Slightly rephrased, aeb.
|
|
|
|
.\" Modified 1 Feb 2003 - added CLONE_SIGHAND restriction, aeb.
|
|
|
|
.\" Modified 1 Jan 2004 - various updates, aeb
|
2007-12-22 22:43:42 +00:00
|
|
|
.\" Modified 2004-09-10 - added CLONE_PARENT_SETTID etc. - aeb.
|
2007-06-08 09:56:56 +00:00
|
|
|
.\" 2005-04-12, mtk, noted the PID caching behavior of NPTL's getpid()
|
2005-04-12 08:11:06 +00:00
|
|
|
.\" wrapper under BUGS.
|
2005-05-17 15:06:30 +00:00
|
|
|
.\" 2005-05-10, mtk, added CLONE_SYSVSEM, CLONE_UNTRACED, CLONE_STOPPED.
|
|
|
|
.\" 2005-05-17, mtk, Substantially enhanced discussion of CLONE_THREAD.
|
clock_getres.2, clone.2, mbind.2, set_mempolicy.2, atan2.3, getipnodebyname.3, ilogb.3, lgamma.3, elf.5, capabilities.7, math_error.7: srcfix: Remove double space
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2011-09-27 03:17:10 +00:00
|
|
|
.\" 2008-11-18, mtk, order CLONE_* flags alphabetically
|
2008-11-19 13:12:00 +00:00
|
|
|
.\" 2008-11-18, mtk, document CLONE_NEWPID
|
2008-11-19 15:55:24 +00:00
|
|
|
.\" 2008-11-19, mtk, document CLONE_NEWUTS
|
2008-11-19 19:15:25 +00:00
|
|
|
.\" 2008-11-19, mtk, document CLONE_NEWIPC
|
2008-11-19 22:31:32 +00:00
|
|
|
.\" 2008-11-19, Jens Axboe, mtk, document CLONE_IO
|
2004-11-03 13:51:07 +00:00
|
|
|
.\"
|
intro.1, locale.1, _exit.2, access.2, bpf.2, brk.2, capget.2, chmod.2, chroot.2, clock_getres.2, clone.2, eventfd.2, fallocate.2, fork.2, getgroups.2, gethostname.2, getpid.2, getpriority.2, getrlimit.2, getrusage.2, gettid.2, iopl.2, ioprio_set.2, killpg.2, mlock.2, mprotect.2, perf_event_open.2, poll.2, posix_fadvise.2, pread.2, ptrace.2, read.2, readv.2, recv.2, rename.2, sched_setaffinity.2, sched_setattr.2, seccomp.2, select.2, send.2, seteuid.2, setgid.2, setresuid.2, setreuid.2, setuid.2, sigaltstack.2, signalfd.2, sigpending.2, sigprocmask.2, sigreturn.2, sigsuspend.2, sigwaitinfo.2, socket.2, stat.2, timer_create.2, uname.2, utimensat.2, wait.2, wait4.2, write.2, MB_LEN_MAX.3, __ppc_get_timebase.3, clearenv.3, dl_iterate_phdr.3, error.3, fexecve.3, fpurge.3, fread.3, fts.3, getaddrinfo.3, getaddrinfo_a.3, getauxval.3, getgrent_r.3, gethostbyname.3, getifaddrs.3, getnameinfo.3, getnetent_r.3, getprotoent.3, getprotoent_r.3, getpw.3, getpwent_r.3, getrpcent.3, getrpcent_r.3, getrpcport.3, getservent.3, getservent_r.3, gsignal.3, key_setsecret.3, malloc_get_state.3, malloc_info.3, malloc_stats.3, malloc_trim.3, memcpy.3, mq_notify.3, mq_open.3, perror.3, profil.3, psignal.3, pthread_attr_init.3, pthread_attr_setaffinity_np.3, pthread_cancel.3, pthread_cleanup_push.3, pthread_create.3, pthread_detach.3, pthread_getattr_np.3, pthread_join.3, pthread_setname_np.3, pthread_tryjoin_np.3, putgrent.3, rcmd.3, rpc.3, rpmatch.3, sem_close.3, sem_open.3, setaliasent.3, shm_open.3, sigqueue.3, strfmon.3, xcrypt.3, xdr.3, console_codes.4, null.4, core.5, host.conf.5, hosts.equiv.5, locale.5, repertoiremap.5, locale.7, man-pages.7, pty.7, rtld-audit.7, sched.7, vdso.7: tstamp
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2015-07-23 14:12:28 +00:00
|
|
|
.TH CLONE 2 2015-07-23 "Linux" "Linux Programmer's Manual"
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NAME
|
2007-06-19 20:09:36 +00:00
|
|
|
clone, __clone2 \- create a child process
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH SYNOPSIS
|
2006-05-31 22:16:55 +00:00
|
|
|
.nf
|
2013-04-16 04:31:19 +00:00
|
|
|
/* Prototype for the glibc wrapper function */
|
|
|
|
|
2004-11-03 13:51:07 +00:00
|
|
|
.B #include <sched.h>
|
2006-05-31 22:16:55 +00:00
|
|
|
|
2006-12-04 05:25:49 +00:00
|
|
|
.BI "int clone(int (*" "fn" ")(void *), void *" child_stack ,
|
|
|
|
.BI " int " flags ", void *" "arg" ", ... "
|
2009-06-21 13:02:21 +00:00
|
|
|
.BI " /* pid_t *" ptid ", struct user_desc *" tls \
|
2006-12-04 05:25:49 +00:00
|
|
|
", pid_t *" ctid " */ );"
|
2013-04-16 04:31:19 +00:00
|
|
|
|
2013-04-16 05:20:17 +00:00
|
|
|
/* Prototype for the raw system call */
|
2013-04-16 04:31:19 +00:00
|
|
|
|
|
|
|
.BI "long clone(unsigned long " flags ", void *" child_stack ,
|
|
|
|
.BI " void *" ptid ", void *" ctid ,
|
|
|
|
.BI " struct pt_regs *" regs );
|
2006-05-31 22:16:55 +00:00
|
|
|
.fi
|
2013-03-01 09:48:38 +00:00
|
|
|
.sp
|
|
|
|
.in -4n
|
2013-04-16 04:31:19 +00:00
|
|
|
Feature Test Macro Requirements for glibc wrapper function (see
|
2013-03-01 09:48:38 +00:00
|
|
|
.BR feature_test_macros (7)):
|
|
|
|
.in
|
|
|
|
.sp
|
|
|
|
.BR clone ():
|
|
|
|
.ad l
|
|
|
|
.RS 4
|
|
|
|
.PD 0
|
|
|
|
.TP 4
|
|
|
|
Since glibc 2.14:
|
|
|
|
_GNU_SOURCE
|
|
|
|
.TP 4
|
2014-03-11 09:26:06 +00:00
|
|
|
.\" See http://sources.redhat.com/bugzilla/show_bug.cgi?id=4749
|
2013-03-01 09:48:38 +00:00
|
|
|
Before glibc 2.14:
|
|
|
|
_BSD_SOURCE || _SVID_SOURCE
|
|
|
|
/* _GNU_SOURCE also suffices */
|
|
|
|
.PD
|
|
|
|
.RE
|
|
|
|
.ad b
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH DESCRIPTION
|
2005-06-30 08:58:03 +00:00
|
|
|
.BR clone ()
|
|
|
|
creates a new process, in a manner similar to
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR fork (2).
|
2013-04-16 04:31:19 +00:00
|
|
|
|
|
|
|
This page describes both the glibc
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR clone ()
|
2013-04-16 05:20:17 +00:00
|
|
|
wrapper function and the underlying system call on which it is based.
|
2013-04-16 04:31:19 +00:00
|
|
|
The main text describes the wrapper function;
|
2013-04-16 05:20:17 +00:00
|
|
|
the differences for the raw system call
|
2013-04-16 04:31:19 +00:00
|
|
|
are described toward the end of this page.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
|
|
|
Unlike
|
|
|
|
.BR fork (2),
|
2013-04-16 04:31:19 +00:00
|
|
|
.BR clone ()
|
|
|
|
allows the child process to share parts of its execution context with
|
2004-11-03 13:51:07 +00:00
|
|
|
the calling process, such as the memory space, the table of file
|
2007-04-12 22:42:49 +00:00
|
|
|
descriptors, and the table of signal handlers.
|
|
|
|
(Note that on this manual
|
|
|
|
page, "calling process" normally corresponds to "parent process".
|
|
|
|
But see the description of
|
|
|
|
.B CLONE_PARENT
|
2004-11-03 13:51:07 +00:00
|
|
|
below.)
|
|
|
|
|
2015-03-01 14:57:12 +00:00
|
|
|
One use of
|
2005-06-30 08:58:03 +00:00
|
|
|
.BR clone ()
|
2004-11-03 13:51:07 +00:00
|
|
|
is to implement threads: multiple threads of control in a program that
|
|
|
|
run concurrently in a shared memory space.
|
|
|
|
|
|
|
|
When the child process is created with
|
2007-04-12 22:42:49 +00:00
|
|
|
.BR clone (),
|
2004-11-03 13:51:07 +00:00
|
|
|
it executes the function
|
2007-04-12 22:42:49 +00:00
|
|
|
.IR fn ( arg ).
|
2004-11-03 13:51:07 +00:00
|
|
|
(This differs from
|
2007-04-12 22:42:49 +00:00
|
|
|
.BR fork (2),
|
2004-11-03 13:51:07 +00:00
|
|
|
where execution continues in the child from the point
|
2007-04-12 22:42:49 +00:00
|
|
|
of the
|
|
|
|
.BR fork (2)
|
2004-11-03 13:51:07 +00:00
|
|
|
call.)
|
|
|
|
The
|
|
|
|
.I fn
|
|
|
|
argument is a pointer to a function that is called by the child
|
|
|
|
process at the beginning of its execution.
|
|
|
|
The
|
|
|
|
.I arg
|
|
|
|
argument is passed to the
|
|
|
|
.I fn
|
|
|
|
function.
|
|
|
|
|
2007-04-12 22:42:49 +00:00
|
|
|
When the
|
2004-11-03 13:51:07 +00:00
|
|
|
.IR fn ( arg )
|
2007-04-12 22:42:49 +00:00
|
|
|
function application returns, the child process terminates.
|
|
|
|
The integer returned by
|
2004-11-03 13:51:07 +00:00
|
|
|
.I fn
|
2007-04-12 22:42:49 +00:00
|
|
|
is the exit code for the child process.
|
|
|
|
The child process may also terminate explicitly by calling
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR exit (2)
|
|
|
|
or after receiving a fatal signal.
|
|
|
|
|
|
|
|
The
|
|
|
|
.I child_stack
|
2007-04-12 22:42:49 +00:00
|
|
|
argument specifies the location of the stack used by the child process.
|
|
|
|
Since the child and calling process may share memory,
|
2004-11-03 13:51:07 +00:00
|
|
|
it is not possible for the child process to execute in the
|
2007-04-12 22:42:49 +00:00
|
|
|
same stack as the calling process.
|
|
|
|
The calling process must therefore
|
2004-11-03 13:51:07 +00:00
|
|
|
set up memory space for the child stack and pass a pointer to this
|
|
|
|
space to
|
2005-06-30 08:58:03 +00:00
|
|
|
.BR clone ().
|
Changes.old, clone.2, execve.2, fcntl.2, futex.2, getitimer.2, getpriority.2, mmap.2, mount.2, mprotect.2, sched_setscheduler.2, select_tut.2, setuid.2, sigaltstack.2, vfork.2, div.3, fenv.3, fmod.3, memchr.3, pthread_attr_setstackaddr.3, pthread_attr_setstacksize.3, pthread_getattr_np.3, queue.3, scanf.3, trunc.3, st.4, proc.5, services.5, utmp.5, bootparam.7, capabilities.7, feature_test_macros.7, futex.7, glob.7, man.7, netlink.7, unicode.7: Switch to American usage: "-wards" ==> "-ward"
American English uses "afterward" in preference to "afterwards",
and so on
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2010-09-26 05:34:47 +00:00
|
|
|
Stacks grow downward on all processors that run Linux
|
2004-11-03 13:51:07 +00:00
|
|
|
(except the HP PA processors), so
|
|
|
|
.I child_stack
|
|
|
|
usually points to the topmost address of the memory space set up for
|
|
|
|
the child stack.
|
|
|
|
|
|
|
|
The low byte of
|
|
|
|
.I flags
|
2005-05-17 15:06:30 +00:00
|
|
|
contains the number of the
|
|
|
|
.I "termination signal"
|
|
|
|
sent to the parent when the child dies.
|
|
|
|
If this signal is specified as anything other than
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR SIGCHLD ,
|
|
|
|
then the parent process must specify the
|
2007-04-12 22:42:49 +00:00
|
|
|
.B __WALL
|
|
|
|
or
|
2004-11-03 13:51:07 +00:00
|
|
|
.B __WCLONE
|
2007-04-12 22:42:49 +00:00
|
|
|
options when waiting for the child with
|
|
|
|
.BR wait (2).
|
2004-11-03 13:51:07 +00:00
|
|
|
If no signal is specified, then the parent process is not signaled
|
|
|
|
when the child terminates.
|
|
|
|
|
|
|
|
.I flags
|
2005-05-17 15:06:30 +00:00
|
|
|
may also be bitwise-or'ed with zero or more of the following constants,
|
|
|
|
in order to specify what is shared between the calling process
|
2004-11-03 13:51:07 +00:00
|
|
|
and the child process:
|
|
|
|
.TP
|
2008-11-18 21:20:54 +00:00
|
|
|
.BR CLONE_CHILD_CLEARTID " (since Linux 2.5.49)"
|
2015-05-05 07:02:33 +00:00
|
|
|
Erase the child thread ID at the location
|
2009-06-21 13:02:21 +00:00
|
|
|
.I ctid
|
2008-11-18 21:20:54 +00:00
|
|
|
in child memory when the child exits, and do a wakeup on the futex
|
|
|
|
at that address.
|
|
|
|
The address involved may be changed by the
|
|
|
|
.BR set_tid_address (2)
|
|
|
|
system call.
|
|
|
|
This is used by threading libraries.
|
|
|
|
.TP
|
|
|
|
.BR CLONE_CHILD_SETTID " (since Linux 2.5.49)"
|
2015-05-05 07:02:33 +00:00
|
|
|
Store the child thread ID at the location
|
2009-06-21 13:02:21 +00:00
|
|
|
.I ctid
|
2015-05-05 07:02:33 +00:00
|
|
|
in the child's memory.
|
2008-11-18 21:20:54 +00:00
|
|
|
.TP
|
2013-01-01 06:35:31 +00:00
|
|
|
.BR CLONE_FILES " (since Linux 2.0)"
|
2004-11-03 13:51:07 +00:00
|
|
|
If
|
2008-11-18 21:20:54 +00:00
|
|
|
.B CLONE_FILES
|
|
|
|
is set, the calling process and the child process share the same file
|
|
|
|
descriptor table.
|
|
|
|
Any file descriptor created by the calling process or by the child
|
|
|
|
process is also valid in the other process.
|
|
|
|
Similarly, if one of the processes closes a file descriptor,
|
|
|
|
or changes its associated flags (using the
|
|
|
|
.BR fcntl (2)
|
|
|
|
.B F_SETFD
|
|
|
|
operation), the other process is also affected.
|
2013-05-06 06:14:41 +00:00
|
|
|
If a process sharing a file descriptor table calls
|
|
|
|
.BR execve (2),
|
|
|
|
its file descriptor table is duplicated (unshared).
|
2004-11-03 13:51:07 +00:00
|
|
|
|
|
|
|
If
|
2008-11-18 21:20:54 +00:00
|
|
|
.B CLONE_FILES
|
|
|
|
is not set, the child process inherits a copy of all file descriptors
|
|
|
|
opened in the calling process at the time of
|
|
|
|
.BR clone ().
|
|
|
|
(The duplicated file descriptors in the child refer to the
|
|
|
|
same open file descriptions (see
|
|
|
|
.BR open (2))
|
|
|
|
as the corresponding file descriptors in the calling process.)
|
|
|
|
Subsequent operations that open or close file descriptors,
|
|
|
|
or change file descriptor flags,
|
|
|
|
performed by either the calling
|
|
|
|
process or the child process do not affect the other process.
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
2013-01-01 06:35:31 +00:00
|
|
|
.BR CLONE_FS " (since Linux 2.0)"
|
2004-11-03 13:51:07 +00:00
|
|
|
If
|
|
|
|
.B CLONE_FS
|
intro.1, time.1, access.2, acct.2, alloc_hugepages.2, bind.2, chdir.2, chmod.2, chown.2, chroot.2, clone.2, close.2, execve.2, fallocate.2, fcntl.2, getdents.2, getrusage.2, getxattr.2, init_module.2, inotify_add_watch.2, ioprio_set.2, kcmp.2, link.2, listxattr.2, lseek.2, madvise.2, mkdir.2, mknod.2, mmap.2, mount.2, move_pages.2, msgctl.2, nfsservctl.2, open.2, pivot_root.2, quotactl.2, read.2, readlink.2, removexattr.2, rename.2, rmdir.2, semctl.2, setfsgid.2, setfsuid.2, setresuid.2, setuid.2, setup.2, setxattr.2, shmctl.2, splice.2, spu_create.2, stat.2, statfs.2, swapon.2, symlink.2, sync.2, sync_file_range.2, sysfs.2, truncate.2, umount.2, unlink.2, unshare.2, ustat.2, utime.2, utimensat.2, write.2, btree.3, errno.3, fexecve.3, ftw.3, futimes.3, get_nprocs_conf.3, getcwd.3, getdirentries.3, getmntent.3, glob.3, mkfifo.3, mq_open.3, readdir.3, realpath.3, recno.3, remove.3, sem_open.3, shm_open.3, statvfs.3, sysconf.3, telldir.3, tmpfile.3, cciss.4, initrd.4, pts.4, sk98lin.4, vcs.4, core.5, filesystems.5, proc.5, boot.7, bootparam.7, capabilities.7, cpuset.7, credentials.7, feature_test_macros.7, fifo.7, hier.7, inotify.7, intro.7, mq_overview.7, path_resolution.7, pipe.7, sem_overview.7, shm_overview.7, spufs.7, symlink.7, unix.7, uri.7, sync.8: Global fix: s/file system/filesystem/
Notwithstanding 24d01c530c5a3f75217543d02bf6712395e5f90c,
"filesystem" is the form used by the great majority of man pages
outside the man-pages project and in a number of other sources,
so let's go with that.
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-08-08 08:07:57 +00:00
|
|
|
is set, the caller and the child process share the same filesystem
|
2007-04-12 22:42:49 +00:00
|
|
|
information.
|
intro.1, time.1, access.2, acct.2, alloc_hugepages.2, bind.2, chdir.2, chmod.2, chown.2, chroot.2, clone.2, close.2, execve.2, fallocate.2, fcntl.2, getdents.2, getrusage.2, getxattr.2, init_module.2, inotify_add_watch.2, ioprio_set.2, kcmp.2, link.2, listxattr.2, lseek.2, madvise.2, mkdir.2, mknod.2, mmap.2, mount.2, move_pages.2, msgctl.2, nfsservctl.2, open.2, pivot_root.2, quotactl.2, read.2, readlink.2, removexattr.2, rename.2, rmdir.2, semctl.2, setfsgid.2, setfsuid.2, setresuid.2, setuid.2, setup.2, setxattr.2, shmctl.2, splice.2, spu_create.2, stat.2, statfs.2, swapon.2, symlink.2, sync.2, sync_file_range.2, sysfs.2, truncate.2, umount.2, unlink.2, unshare.2, ustat.2, utime.2, utimensat.2, write.2, btree.3, errno.3, fexecve.3, ftw.3, futimes.3, get_nprocs_conf.3, getcwd.3, getdirentries.3, getmntent.3, glob.3, mkfifo.3, mq_open.3, readdir.3, realpath.3, recno.3, remove.3, sem_open.3, shm_open.3, statvfs.3, sysconf.3, telldir.3, tmpfile.3, cciss.4, initrd.4, pts.4, sk98lin.4, vcs.4, core.5, filesystems.5, proc.5, boot.7, bootparam.7, capabilities.7, cpuset.7, credentials.7, feature_test_macros.7, fifo.7, hier.7, inotify.7, intro.7, mq_overview.7, path_resolution.7, pipe.7, sem_overview.7, shm_overview.7, spufs.7, symlink.7, unix.7, uri.7, sync.8: Global fix: s/file system/filesystem/
Notwithstanding 24d01c530c5a3f75217543d02bf6712395e5f90c,
"filesystem" is the form used by the great majority of man pages
outside the man-pages project and in a number of other sources,
so let's go with that.
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-08-08 08:07:57 +00:00
|
|
|
This includes the root of the filesystem, the current
|
2007-04-12 22:42:49 +00:00
|
|
|
working directory, and the umask.
|
|
|
|
Any call to
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR chroot (2),
|
|
|
|
.BR chdir (2),
|
|
|
|
or
|
|
|
|
.BR umask (2)
|
2005-06-30 08:58:03 +00:00
|
|
|
performed by the calling process or the child process also affects the
|
2004-11-03 13:51:07 +00:00
|
|
|
other process.
|
|
|
|
|
2007-04-12 22:42:49 +00:00
|
|
|
If
|
2004-11-03 13:51:07 +00:00
|
|
|
.B CLONE_FS
|
intro.1, time.1, access.2, acct.2, alloc_hugepages.2, bind.2, chdir.2, chmod.2, chown.2, chroot.2, clone.2, close.2, execve.2, fallocate.2, fcntl.2, getdents.2, getrusage.2, getxattr.2, init_module.2, inotify_add_watch.2, ioprio_set.2, kcmp.2, link.2, listxattr.2, lseek.2, madvise.2, mkdir.2, mknod.2, mmap.2, mount.2, move_pages.2, msgctl.2, nfsservctl.2, open.2, pivot_root.2, quotactl.2, read.2, readlink.2, removexattr.2, rename.2, rmdir.2, semctl.2, setfsgid.2, setfsuid.2, setresuid.2, setuid.2, setup.2, setxattr.2, shmctl.2, splice.2, spu_create.2, stat.2, statfs.2, swapon.2, symlink.2, sync.2, sync_file_range.2, sysfs.2, truncate.2, umount.2, unlink.2, unshare.2, ustat.2, utime.2, utimensat.2, write.2, btree.3, errno.3, fexecve.3, ftw.3, futimes.3, get_nprocs_conf.3, getcwd.3, getdirentries.3, getmntent.3, glob.3, mkfifo.3, mq_open.3, readdir.3, realpath.3, recno.3, remove.3, sem_open.3, shm_open.3, statvfs.3, sysconf.3, telldir.3, tmpfile.3, cciss.4, initrd.4, pts.4, sk98lin.4, vcs.4, core.5, filesystems.5, proc.5, boot.7, bootparam.7, capabilities.7, cpuset.7, credentials.7, feature_test_macros.7, fifo.7, hier.7, inotify.7, intro.7, mq_overview.7, path_resolution.7, pipe.7, sem_overview.7, shm_overview.7, spufs.7, symlink.7, unix.7, uri.7, sync.8: Global fix: s/file system/filesystem/
Notwithstanding 24d01c530c5a3f75217543d02bf6712395e5f90c,
"filesystem" is the form used by the great majority of man pages
outside the man-pages project and in a number of other sources,
so let's go with that.
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-08-08 08:07:57 +00:00
|
|
|
is not set, the child process works on a copy of the filesystem
|
2004-11-03 13:51:07 +00:00
|
|
|
information of the calling process at the time of the
|
2005-06-30 08:58:03 +00:00
|
|
|
.BR clone ()
|
2004-11-03 13:51:07 +00:00
|
|
|
call.
|
|
|
|
Calls to
|
|
|
|
.BR chroot (2),
|
|
|
|
.BR chdir (2),
|
|
|
|
.BR umask (2)
|
|
|
|
performed later by one of the processes do not affect the other process.
|
|
|
|
.TP
|
2008-11-20 14:59:15 +00:00
|
|
|
.BR CLONE_IO " (since Linux 2.6.25)"
|
2008-11-19 22:29:03 +00:00
|
|
|
If
|
|
|
|
.B CLONE_IO
|
|
|
|
is set, then the new process shares an I/O context with
|
|
|
|
the calling process.
|
|
|
|
If this flag is not set, then (as with
|
|
|
|
.BR fork (2))
|
|
|
|
the new process has its own I/O context.
|
|
|
|
|
|
|
|
.\" The following based on text from Jens Axboe
|
2008-11-26 02:44:53 +00:00
|
|
|
The I/O context is the I/O scope of the disk scheduler (i.e,
|
2008-11-19 22:29:03 +00:00
|
|
|
what the I/O scheduler uses to model scheduling of a process's I/O).
|
|
|
|
If processes share the same I/O context,
|
|
|
|
they are treated as one by the I/O scheduler.
|
|
|
|
As a consequence, they get to share disk time.
|
|
|
|
For some I/O schedulers,
|
|
|
|
.\" the anticipatory and CFQ scheduler
|
|
|
|
if two processes share an I/O context,
|
|
|
|
they will be allowed to interleave their disk access.
|
|
|
|
If several threads are doing I/O on behalf of the same process
|
|
|
|
.RB ( aio_read (3),
|
|
|
|
for instance), they should employ
|
|
|
|
.BR CLONE_IO
|
|
|
|
to get better I/O performance.
|
|
|
|
.\" with CFQ and AS.
|
|
|
|
|
|
|
|
If the kernel is not configured with the
|
|
|
|
.B CONFIG_BLOCK
|
|
|
|
option, this flag is a no-op.
|
|
|
|
.TP
|
2009-07-18 04:16:12 +00:00
|
|
|
.BR CLONE_NEWIPC " (since Linux 2.6.19)"
|
2008-11-19 19:15:25 +00:00
|
|
|
If
|
|
|
|
.B CLONE_NEWIPC
|
|
|
|
is set, then create the process in a new IPC namespace.
|
|
|
|
If this flag is not set, then (as with
|
2012-12-27 10:20:30 +00:00
|
|
|
.BR fork (2)),
|
2008-11-19 19:15:25 +00:00
|
|
|
the process is created in the same IPC namespace as
|
|
|
|
the calling process.
|
2008-11-20 14:54:34 +00:00
|
|
|
This flag is intended for the implementation of containers.
|
2008-11-19 19:15:25 +00:00
|
|
|
|
clone.2, execve.2, getpriority.2, ipc.2, kcmp.2, killpg.2, msgctl.2, msgget.2, msgop.2, select.2, semctl.2, semget.2, semop.2, setpgid.2, shmctl.2, shmget.2, shmop.2, sigaction.2, signal.2, socket.2, socketpair.2, syscalls.2, umask.2, unshare.2: ffix: Don't allow line break inside "System V"
2014-04-28 07:36:03 +00:00
|
|
|
An IPC namespace provides an isolated view of System\ V IPC objects (see
|
2013-01-06 19:22:39 +00:00
|
|
|
.BR svipc (7))
|
|
|
|
and (since Linux 2.6.30)
|
|
|
|
.\" commit 7eafd7c74c3f2e67c27621b987b28397110d643f
|
|
|
|
.\" https://lwn.net/Articles/312232/
|
|
|
|
POSIX message queues
|
|
|
|
(see
|
|
|
|
.BR mq_overview (7)).
|
2013-01-06 19:27:22 +00:00
|
|
|
The common characteristic of these IPC mechanisms is that IPC
|
|
|
|
objects are identified by mechanisms other than filesystem
|
|
|
|
pathnames.
|
2013-01-06 19:22:39 +00:00
|
|
|
|
2009-09-28 08:31:09 +00:00
|
|
|
Objects created in an IPC namespace are visible to all other processes
|
2008-11-19 19:15:25 +00:00
|
|
|
that are members of that namespace,
|
|
|
|
but are not visible to processes in other IPC namespaces.
|
|
|
|
|
2008-11-20 16:21:41 +00:00
|
|
|
When an IPC namespace is destroyed
|
2013-01-06 19:22:39 +00:00
|
|
|
(i.e., when the last process that is a member of the namespace terminates),
|
2008-11-20 16:21:41 +00:00
|
|
|
all IPC objects in the namespace are automatically destroyed.
|
|
|
|
|
2013-01-14 05:26:50 +00:00
|
|
|
Only a privileged process
|
|
|
|
.RB ( CAP_SYS_ADMIN )
|
|
|
|
can employ
|
|
|
|
.BR CLONE_NEWIPC .
|
2008-11-19 19:15:25 +00:00
|
|
|
This flag can't be specified in conjunction with
|
|
|
|
.BR CLONE_SYSVSEM .
|
2013-01-14 03:21:33 +00:00
|
|
|
|
|
|
|
For further information on IPC namespaces, see
|
|
|
|
.BR namespaces (7).
|
2008-11-19 19:15:25 +00:00
|
|
|
.TP
|
2008-11-20 17:15:23 +00:00
|
|
|
.BR CLONE_NEWNET " (since Linux 2.6.24)"
|
intro.1, _syscall.2, access.2, arch_prctl.2, cacheflush.2, chown.2, clock_getres.2, clone.2, create_module.2, fcntl.2, flock.2, get_kernel_syms.2, get_robust_list.2, get_thread_area.2, getcpu.2, getpriority.2, getrlimit.2, getrusage.2, ioprio_set.2, kexec_load.2, madvise.2, mbind.2, migrate_pages.2, mknod.2, mmap.2, mount.2, move_pages.2, mprotect.2, open.2, pause.2, pciconfig_read.2, perf_event_open.2, prctl.2, ptrace.2, query_module.2, read.2, reboot.2, recv.2, s390_runtime_instr.2, sched_setscheduler.2, select_tut.2, send.2, set_mempolicy.2, setfsgid.2, setfsuid.2, sigaction.2, spu_create.2, spu_run.2, stime.2, swapon.2, syslog.2, timer_create.2, timer_getoverrun.2, times.2, tkill.2, umount.2, unimplemented.2, ustat.2, vm86.2, wait.2, abs.3, aio_read.3, aio_write.3, bsd_signal.3, catgets.3, clearenv.3, cmsg.3, dbopen.3, dirfd.3, dlopen.3, exec.3, fenv.3, ferror.3, fmemopen.3, fnmatch.3, fopen.3, futimes.3, getaddrinfo.3, getifaddrs.3, getipnodebyname.3, hsearch.3, if_nameindex.3, inet_pton.3, mblen.3, mbrlen.3, mbsrtowcs.3, mbtowc.3, mcheck.3, memfrob.3, mq_notify.3, netlink.3, posix_memalign.3, printf.3, pthread_attr_setscope.3, pthread_cleanup_push.3, pthread_kill_other_threads_np.3, pthread_self.3, pthread_setcancelstate.3, pthread_setconcurrency.3, raise.3, resolver.3, rpc.3, rtime.3, rtnetlink.3, scanf.3, setbuf.3, setnetgrent.3, shm_open.3, sigpause.3, sigset.3, sigwait.3, sockatmark.3, strcasecmp.3, strcmp.3, strdup.3, strftime.3, strptime.3, strsignal.3, strverscmp.3, sysv_signal.3, termios.3, wcrtomb.3, wcsnlen.3, wcsnrtombs.3, wcsrtombs.3, wctomb.3, wprintf.3, console_codes.4, cpuid.4, msr.4, rtc.4, sk98lin.4, st.4, tty.4, charmap.5, core.5, elf.5, hosts.equiv.5, proc.5, resolv.conf.5, services.5, slabinfo.5, arp.7, bootparam.7, capabilities.7, charsets.7, cpuset.7, ddp.7, epoll.7, feature_test_macros.7, futex.7, hier.7, icmp.7, inotify.7, ip.7, ipv6.7, man-pages.7, mdoc.7, mdoc.samples.7, netdevice.7, netlink.7, numa.7, packet.7, path_resolution.7, posixoptions.7, pthreads.7, raw.7, rtld-audit.7, rtnetlink.7, sem_overview.7, sigevent.7, socket.7, spufs.7, tcp.7, udp.7, unicode.7, uri.7, utf-8.7, intro.8, ldconfig.8, sync.8: Global fix: fix placement of word "only"
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-03-31 08:53:00 +00:00
|
|
|
(The implementation of this flag was completed only
|
2010-10-30 06:12:03 +00:00
|
|
|
by about kernel version 2.6.29.)
|
2008-11-20 17:15:23 +00:00
|
|
|
|
|
|
|
If
|
|
|
|
.B CLONE_NEWNET
|
|
|
|
is set, then create the process in a new network namespace.
|
|
|
|
If this flag is not set, then (as with
|
2012-12-27 09:33:08 +00:00
|
|
|
.BR fork (2))
|
2008-11-20 17:15:23 +00:00
|
|
|
the process is created in the same network namespace as
|
|
|
|
the calling process.
|
|
|
|
This flag is intended for the implementation of containers.
|
|
|
|
|
|
|
|
A network namespace provides an isolated view of the networking stack
|
|
|
|
(network device interfaces, IPv4 and IPv6 protocol stacks,
|
|
|
|
IP routing tables, firewall rules, the
|
|
|
|
.I /proc/net
|
|
|
|
and
|
|
|
|
.I /sys/class/net
|
|
|
|
directory trees, sockets, etc.).
|
|
|
|
A physical network device can live in exactly one
|
|
|
|
network namespace.
|
|
|
|
A virtual network device ("veth") pair provides a pipe-like abstraction
|
adjtimex.2, bind.2, cacheflush.2, clone.2, fallocate.2, fanotify_init.2, fanotify_mark.2, flock.2, futex.2, getdents.2, getpriority.2, getrlimit.2, gettid.2, gettimeofday.2, ioprio_set.2, kexec_load.2, migrate_pages.2, modify_ldt.2, mount.2, move_pages.2, mprotect.2, msgop.2, nfsservctl.2, perf_event_open.2, pread.2, ptrace.2, recvmmsg.2, rename.2, restart_syscall.2, sched_setattr.2, send.2, shmop.2, shutdown.2, sigaction.2, signalfd.2, syscalls.2, timer_create.2, timerfd_create.2, tkill.2, vmsplice.2, wait.2, aio_init.3, confstr.3, exit.3, fmemopen.3, fopen.3, getaddrinfo.3, getauxval.3, getspnam.3, isalpha.3, isatty.3, mallinfo.3, malloc.3, mallopt.3, psignal.3, pthread_attr_setinheritsched.3, qecvt.3, queue.3, rtnetlink.3, strerror.3, strftime.3, toupper.3, towlower.3, towupper.3, initrd.4, locale.5, proc.5, bootparam.7, capabilities.7, ddp.7, fanotify.7, icmp.7, inotify.7, ip.7, ipv6.7, netdevice.7, netlink.7, path_resolution.7, rtld-audit.7, rtnetlink.7, sched.7, signal.7, socket.7, svipc.7, tcp.7, unix.7, ld.so.8: srcfix: Update FIXMEs
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2014-08-21 21:47:44 +00:00
|
|
|
.\" FIXME . Add pointer to veth(4) page when it is eventually completed
|
2008-11-20 17:15:23 +00:00
|
|
|
that can be used to create tunnels between network namespaces,
|
|
|
|
and can be used to create a bridge to a physical network device
|
|
|
|
in another namespace.
|
|
|
|
|
2008-11-25 14:46:46 +00:00
|
|
|
When a network namespace is freed
|
|
|
|
(i.e., when the last process in the namespace terminates),
|
|
|
|
its physical network devices are moved back to the
|
|
|
|
initial network namespace (not to the parent of the process).
|
2013-01-14 03:24:34 +00:00
|
|
|
For further information on network namespaces, see
|
|
|
|
.BR namespaces (7).
|
2008-11-25 14:46:46 +00:00
|
|
|
|
2013-01-14 05:26:50 +00:00
|
|
|
Only a privileged process
|
|
|
|
.RB ( CAP_SYS_ADMIN )
|
|
|
|
can employ
|
|
|
|
.BR CLONE_NEWNET .
|
2008-11-20 17:15:23 +00:00
|
|
|
.TP
|
2006-05-31 22:16:55 +00:00
|
|
|
.BR CLONE_NEWNS " (since Linux 2.4.19)"
|
2013-01-14 03:41:24 +00:00
|
|
|
If
|
|
|
|
.B CLONE_NEWNS
|
|
|
|
is set, the cloned child is started in a new mount namespace,
|
|
|
|
initialized with a copy of the namespace of the parent.
|
|
|
|
If
|
2004-11-03 13:51:07 +00:00
|
|
|
.B CLONE_NEWNS
|
2013-01-14 03:41:24 +00:00
|
|
|
is not set, the child lives in the same mount
|
2008-11-19 19:23:47 +00:00
|
|
|
namespace as the parent.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2013-01-14 03:41:24 +00:00
|
|
|
For further information on mount namespaces, see
|
|
|
|
.BR namespaces (7).
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2013-01-14 05:26:50 +00:00
|
|
|
Only a privileged process
|
|
|
|
.RB ( CAP_SYS_ADMIN )
|
|
|
|
can employ
|
|
|
|
.BR CLONE_NEWNS .
|
2004-11-03 13:51:07 +00:00
|
|
|
It is not permitted to specify both
|
|
|
|
.B CLONE_NEWNS
|
|
|
|
and
|
|
|
|
.B CLONE_FS
|
2014-09-16 08:05:11 +00:00
|
|
|
.\" See https://lwn.net/Articles/543273/
|
2004-11-03 13:51:07 +00:00
|
|
|
in the same
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR clone ()
|
2004-11-03 13:51:07 +00:00
|
|
|
call.
|
2013-01-14 03:49:29 +00:00
|
|
|
.TP
|
|
|
|
.BR CLONE_NEWPID " (since Linux 2.6.24)"
|
|
|
|
.\" This explanation draws a lot of details from
|
|
|
|
.\" http://lwn.net/Articles/259217/
|
|
|
|
.\" Authors: Pavel Emelyanov <xemul@openvz.org>
|
|
|
|
.\" and Kir Kolyshkin <kir@openvz.org>
|
|
|
|
.\"
|
|
|
|
.\" The primary kernel commit is 30e49c263e36341b60b735cbef5ca37912549264
|
|
|
|
.\" Author: Pavel Emelyanov <xemul@openvz.org>
|
|
|
|
If
|
|
|
|
.B CLONE_NEWPID
|
|
|
|
is set, then create the process in a new PID namespace.
|
|
|
|
If this flag is not set, then (as with
|
|
|
|
.BR fork (2))
|
|
|
|
the process is created in the same PID namespace as
|
|
|
|
the calling process.
|
|
|
|
This flag is intended for the implementation of containers.
|
|
|
|
|
|
|
|
For further information on PID namespaces, see
|
2013-02-27 06:53:34 +00:00
|
|
|
.BR namespaces (7)
|
|
|
|
and
|
|
|
|
.BR pid_namespaces (7)
|
2013-01-14 03:49:29 +00:00
|
|
|
|
2013-01-14 05:26:50 +00:00
|
|
|
Only a privileged process
|
|
|
|
.RB ( CAP_SYS_ADMIN )
|
|
|
|
can employ
|
|
|
|
.BR CLONE_NEWPID .
|
2013-01-14 03:49:29 +00:00
|
|
|
This flag can't be specified in conjunction with
|
2013-03-05 08:55:39 +00:00
|
|
|
.BR CLONE_THREAD
|
|
|
|
or
|
|
|
|
.BR CLONE_PARENT .
|
2012-12-27 09:06:58 +00:00
|
|
|
.TP
|
2012-12-27 10:20:30 +00:00
|
|
|
.BR CLONE_NEWUSER
|
|
|
|
(This flag first became meaningful for
|
|
|
|
.BR clone ()
|
2012-12-28 00:40:22 +00:00
|
|
|
in Linux 2.6.23,
|
|
|
|
the current
|
2015-01-15 17:20:53 +00:00
|
|
|
.BR clone ()
|
2012-12-28 00:40:22 +00:00
|
|
|
semantics were merged in Linux 3.5,
|
|
|
|
and the final pieces to make the user namespaces completely usable were
|
|
|
|
merged in Linux 3.8.)
|
|
|
|
|
2012-12-27 09:06:58 +00:00
|
|
|
If
|
|
|
|
.B CLONE_NEWUSER
|
2012-12-27 10:20:30 +00:00
|
|
|
is set, then create the process in a new user namespace.
|
|
|
|
If this flag is not set, then (as with
|
2012-12-27 09:33:08 +00:00
|
|
|
.BR fork (2))
|
2012-12-27 09:06:58 +00:00
|
|
|
the process is created in the same user namespace as the calling process.
|
|
|
|
|
2013-01-14 03:49:29 +00:00
|
|
|
For further information on user namespaces, see
|
2013-02-27 06:40:40 +00:00
|
|
|
.BR namespaces (7)
|
|
|
|
and
|
|
|
|
.BR user_namespaces (7)
|
2012-12-27 10:20:30 +00:00
|
|
|
|
2012-12-28 00:51:00 +00:00
|
|
|
Before Linux 3.8, use of
|
|
|
|
.BR CLONE_NEWUSER
|
|
|
|
required that the caller have three capabilities:
|
|
|
|
.BR CAP_SYS_ADMIN ,
|
|
|
|
.BR CAP_SETUID ,
|
|
|
|
and
|
|
|
|
.BR CAP_SETGID .
|
|
|
|
.\" Before Linux 2.6.29, it appears that only CAP_SYS_ADMIN was needed
|
2012-12-27 10:20:30 +00:00
|
|
|
Starting with Linux 3.8,
|
2013-01-14 03:49:29 +00:00
|
|
|
no privileges are needed to create a user namespace.
|
2013-03-05 08:55:39 +00:00
|
|
|
|
2013-03-22 12:02:45 +00:00
|
|
|
This flag can't be specified in conjunction with
|
|
|
|
.BR CLONE_THREAD
|
|
|
|
or
|
|
|
|
.BR CLONE_PARENT .
|
|
|
|
For security reasons,
|
|
|
|
.\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71
|
|
|
|
.\" https://lwn.net/Articles/543273/
|
|
|
|
.\" The fix actually went into 3.9 and into 3.8.3. However, user namespaces
|
|
|
|
.\" were, for practical purposes, unusable in earlier 3.8.x because of the
|
2014-03-14 18:54:00 +00:00
|
|
|
.\" various filesystems that didn't support userns.
|
2013-03-05 08:55:39 +00:00
|
|
|
.BR CLONE_NEWUSER
|
|
|
|
cannot be specified in conjunction with
|
2013-03-22 12:02:45 +00:00
|
|
|
.BR CLONE_FS .
|
|
|
|
|
|
|
|
For further information on user namespaces, see
|
|
|
|
.BR user_namespaces (7).
|
2008-11-19 13:12:00 +00:00
|
|
|
.TP
|
2008-11-19 15:55:24 +00:00
|
|
|
.BR CLONE_NEWUTS " (since Linux 2.6.19)"
|
|
|
|
If
|
|
|
|
.B CLONE_NEWUTS
|
2008-11-24 23:12:13 +00:00
|
|
|
is set, then create the process in a new UTS namespace,
|
|
|
|
whose identifiers are initialized by duplicating the identifiers
|
|
|
|
from the UTS namespace of the calling process.
|
2008-11-19 15:55:24 +00:00
|
|
|
If this flag is not set, then (as with
|
2012-12-27 09:33:08 +00:00
|
|
|
.BR fork (2))
|
2008-11-19 15:55:24 +00:00
|
|
|
the process is created in the same UTS namespace as
|
|
|
|
the calling process.
|
2008-11-20 14:54:34 +00:00
|
|
|
This flag is intended for the implementation of containers.
|
2008-11-19 15:55:24 +00:00
|
|
|
|
|
|
|
A UTS namespace is the set of identifiers returned by
|
|
|
|
.BR uname (2);
|
2014-01-02 21:13:23 +00:00
|
|
|
among these, the domain name and the hostname can be modified by
|
2008-11-19 15:55:24 +00:00
|
|
|
.BR setdomainname (2)
|
|
|
|
and
|
|
|
|
.BR sethostname (2),
|
|
|
|
respectively.
|
2009-09-28 08:31:09 +00:00
|
|
|
Changes made to the identifiers in a UTS namespace
|
|
|
|
are visible to all other processes in the same namespace,
|
2008-11-19 15:55:24 +00:00
|
|
|
but are not visible to processes in other UTS namespaces.
|
|
|
|
|
2013-01-14 05:26:50 +00:00
|
|
|
Only a privileged process
|
|
|
|
.RB ( CAP_SYS_ADMIN )
|
|
|
|
can employ
|
|
|
|
.BR CLONE_NEWUTS .
|
2013-01-14 04:26:03 +00:00
|
|
|
|
2013-01-14 05:14:16 +00:00
|
|
|
For further information on UTS namespaces, see
|
2013-01-14 04:26:03 +00:00
|
|
|
.BR namespaces (7).
|
2008-11-19 15:55:24 +00:00
|
|
|
.TP
|
2008-11-18 21:20:54 +00:00
|
|
|
.BR CLONE_PARENT " (since Linux 2.3.12)"
|
|
|
|
If
|
|
|
|
.B CLONE_PARENT
|
|
|
|
is set, then the parent of the new child (as returned by
|
|
|
|
.BR getppid (2))
|
|
|
|
will be the same as that of the calling process.
|
|
|
|
|
|
|
|
If
|
|
|
|
.B CLONE_PARENT
|
|
|
|
is not set, then (as with
|
|
|
|
.BR fork (2))
|
|
|
|
the child's parent is the calling process.
|
|
|
|
|
|
|
|
Note that it is the parent process, as returned by
|
|
|
|
.BR getppid (2),
|
|
|
|
which is signaled when the child terminates, so that
|
|
|
|
if
|
|
|
|
.B CLONE_PARENT
|
|
|
|
is set, then the parent of the calling process, rather than the
|
|
|
|
calling process itself, will be signaled.
|
|
|
|
.TP
|
|
|
|
.BR CLONE_PARENT_SETTID " (since Linux 2.5.49)"
|
2015-05-05 07:02:33 +00:00
|
|
|
Store the child thread ID at the location
|
2009-06-21 13:02:21 +00:00
|
|
|
.I ptid
|
2015-05-05 07:02:33 +00:00
|
|
|
in the parent's memory.
|
2008-11-18 21:20:54 +00:00
|
|
|
(In Linux 2.5.32-2.5.48 there was a flag
|
|
|
|
.B CLONE_SETTID
|
|
|
|
that did this.)
|
|
|
|
.TP
|
|
|
|
.BR CLONE_PID " (obsolete)"
|
|
|
|
If
|
|
|
|
.B CLONE_PID
|
|
|
|
is set, the child process is created with the same process ID as
|
|
|
|
the calling process.
|
|
|
|
This is good for hacking the system, but otherwise
|
|
|
|
of not much use.
|
|
|
|
Since 2.3.21 this flag can be
|
|
|
|
specified only by the system boot process (PID 0).
|
2015-02-27 06:42:17 +00:00
|
|
|
It disappeared in Linux 2.5.16.
|
|
|
|
Since then, the kernel silently ignores it without error.
|
2008-11-18 21:20:54 +00:00
|
|
|
.TP
|
2013-01-01 06:35:31 +00:00
|
|
|
.BR CLONE_PTRACE " (since Linux 2.2)"
|
2008-11-18 21:20:54 +00:00
|
|
|
If
|
|
|
|
.B CLONE_PTRACE
|
|
|
|
is specified, and the calling process is being traced,
|
|
|
|
then trace the child also (see
|
|
|
|
.BR ptrace (2)).
|
|
|
|
.TP
|
|
|
|
.BR CLONE_SETTLS " (since Linux 2.5.32)"
|
|
|
|
The
|
|
|
|
.I newtls
|
|
|
|
argument is the new TLS (Thread Local Storage) descriptor.
|
|
|
|
(See
|
|
|
|
.BR set_thread_area (2).)
|
|
|
|
.TP
|
2013-01-01 06:35:31 +00:00
|
|
|
.BR CLONE_SIGHAND " (since Linux 2.0)"
|
2004-11-03 13:51:07 +00:00
|
|
|
If
|
|
|
|
.B CLONE_SIGHAND
|
2008-09-23 05:22:43 +00:00
|
|
|
is set, the calling process and the child process share the same table of
|
2007-04-12 22:42:49 +00:00
|
|
|
signal handlers.
|
|
|
|
If the calling process or child process calls
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR sigaction (2)
|
2007-04-12 22:42:49 +00:00
|
|
|
to change the behavior associated with a signal, the behavior is
|
|
|
|
changed in the other process as well.
|
|
|
|
However, the calling process and child
|
2004-11-03 13:51:07 +00:00
|
|
|
processes still have distinct signal masks and sets of pending
|
2007-04-12 22:42:49 +00:00
|
|
|
signals.
|
|
|
|
So, one of them may block or unblock some signals using
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR sigprocmask (2)
|
|
|
|
without affecting the other process.
|
|
|
|
|
|
|
|
If
|
|
|
|
.B CLONE_SIGHAND
|
|
|
|
is not set, the child process inherits a copy of the signal handlers
|
|
|
|
of the calling process at the time
|
2005-06-30 08:58:03 +00:00
|
|
|
.BR clone ()
|
2007-04-12 22:42:49 +00:00
|
|
|
is called.
|
|
|
|
Calls to
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR sigaction (2)
|
|
|
|
performed later by one of the processes have no effect on the other
|
|
|
|
process.
|
2006-02-16 04:00:49 +00:00
|
|
|
|
|
|
|
Since Linux 2.6.0-test6,
|
|
|
|
.I flags
|
|
|
|
must also include
|
|
|
|
.B CLONE_VM
|
|
|
|
if
|
|
|
|
.B CLONE_SIGHAND
|
|
|
|
is specified
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
2005-05-10 16:48:27 +00:00
|
|
|
.BR CLONE_STOPPED " (since Linux 2.6.0-test2)"
|
|
|
|
If
|
|
|
|
.B CLONE_STOPPED
|
|
|
|
is set, then the child is initially stopped (as though it was sent a
|
|
|
|
.B SIGSTOP
|
|
|
|
signal), and must be resumed by sending it a
|
|
|
|
.B SIGCONT
|
|
|
|
signal.
|
2008-04-14 13:03:17 +00:00
|
|
|
|
2011-09-08 21:30:00 +00:00
|
|
|
This flag was
|
|
|
|
.I deprecated
|
|
|
|
from Linux 2.6.25 onward,
|
|
|
|
and was
|
|
|
|
.I removed
|
2015-02-27 06:42:17 +00:00
|
|
|
altogether in Linux 2.6.38.
|
|
|
|
Since then, the kernel silently ignores it without error.
|
2008-11-08 02:32:57 +00:00
|
|
|
.\" glibc 2.8 removed this defn from bits/sched.h
|
2005-05-10 16:48:27 +00:00
|
|
|
.TP
|
2008-11-18 21:20:54 +00:00
|
|
|
.BR CLONE_SYSVSEM " (since Linux 2.5.10)"
|
2004-11-03 13:51:07 +00:00
|
|
|
If
|
2008-11-18 21:20:54 +00:00
|
|
|
.B CLONE_SYSVSEM
|
|
|
|
is set, then the child and the calling process share
|
2013-03-22 10:34:22 +00:00
|
|
|
a single list of System V semaphore adjustment
|
|
|
|
.RI ( semadj )
|
|
|
|
values (see
|
2008-11-18 21:20:54 +00:00
|
|
|
.BR semop (2)).
|
2013-03-22 10:34:22 +00:00
|
|
|
In this case, the shared list accumulates
|
|
|
|
.I semadj
|
|
|
|
values across all processes sharing the list,
|
|
|
|
and semaphore adjustments are performed only when the last process
|
|
|
|
that is sharing the list terminates (or ceases sharing the list using
|
|
|
|
.BR unshare (2)).
|
2014-09-21 09:24:24 +00:00
|
|
|
If this flag is not set, then the child has a separate
|
2013-03-22 10:34:22 +00:00
|
|
|
.I semadj
|
|
|
|
list that is initially empty.
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.BR CLONE_THREAD " (since Linux 2.4.0-test8)"
|
|
|
|
If
|
|
|
|
.B CLONE_THREAD
|
|
|
|
is set, the child is placed in the same thread group as the calling process.
|
2005-05-17 15:06:30 +00:00
|
|
|
To make the remainder of the discussion of
|
|
|
|
.B CLONE_THREAD
|
|
|
|
more readable, the term "thread" is used to refer to the
|
|
|
|
processes within a thread group.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2005-05-17 15:06:30 +00:00
|
|
|
Thread groups were a feature added in Linux 2.4 to support the
|
|
|
|
POSIX threads notion of a set of threads that share a single PID.
|
|
|
|
Internally, this shared PID is the so-called
|
|
|
|
thread group identifier (TGID) for the thread group.
|
2007-04-12 22:42:49 +00:00
|
|
|
Since Linux 2.4, calls to
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR getpid (2)
|
2005-05-17 15:06:30 +00:00
|
|
|
return the TGID of the caller.
|
|
|
|
|
|
|
|
The threads within a group can be distinguished by their (system-wide)
|
|
|
|
unique thread IDs (TID).
|
|
|
|
A new thread's TID is available as the function result
|
|
|
|
returned to the caller of
|
|
|
|
.BR clone (),
|
|
|
|
and a thread can obtain
|
|
|
|
its own TID using
|
|
|
|
.BR gettid (2).
|
|
|
|
|
2007-04-12 22:42:49 +00:00
|
|
|
When a call is made to
|
2005-05-17 15:06:30 +00:00
|
|
|
.BR clone ()
|
|
|
|
without specifying
|
|
|
|
.BR CLONE_THREAD ,
|
|
|
|
then the resulting thread is placed in a new thread group
|
|
|
|
whose TGID is the same as the thread's TID.
|
|
|
|
This thread is the
|
|
|
|
.I leader
|
|
|
|
of the new thread group.
|
|
|
|
|
|
|
|
A new thread created with
|
|
|
|
.B CLONE_THREAD
|
|
|
|
has the same parent process as the caller of
|
|
|
|
.BR clone ()
|
2007-04-12 22:42:49 +00:00
|
|
|
(i.e., like
|
2005-05-17 15:06:30 +00:00
|
|
|
.BR CLONE_PARENT ),
|
|
|
|
so that calls to
|
|
|
|
.BR getppid (2)
|
|
|
|
return the same value for all of the threads in a thread group.
|
|
|
|
When a
|
2007-04-12 22:42:49 +00:00
|
|
|
.B CLONE_THREAD
|
2005-05-17 15:06:30 +00:00
|
|
|
thread terminates, the thread that created it using
|
|
|
|
.BR clone ()
|
|
|
|
is not sent a
|
|
|
|
.B SIGCHLD
|
|
|
|
(or other termination) signal;
|
|
|
|
nor can the status of such a thread be obtained
|
|
|
|
using
|
|
|
|
.BR wait (2).
|
|
|
|
(The thread is said to be
|
|
|
|
.IR detached .)
|
|
|
|
|
2005-05-17 16:21:20 +00:00
|
|
|
After all of the threads in a thread group terminate
|
|
|
|
the parent process of the thread group is sent a
|
2005-05-17 15:06:30 +00:00
|
|
|
.B SIGCHLD
|
|
|
|
(or other termination) signal.
|
|
|
|
|
|
|
|
If any of the threads in a thread group performs an
|
|
|
|
.BR execve (2),
|
|
|
|
then all threads other than the thread group leader are terminated,
|
|
|
|
and the new program is executed in the thread group leader.
|
|
|
|
|
2005-06-02 10:22:34 +00:00
|
|
|
If one of the threads in a thread group creates a child using
|
|
|
|
.BR fork (2),
|
|
|
|
then any thread in the group can
|
|
|
|
.BR wait (2)
|
|
|
|
for that child.
|
|
|
|
|
2005-06-30 08:58:03 +00:00
|
|
|
Since Linux 2.5.35,
|
2005-05-17 15:06:30 +00:00
|
|
|
.I flags
|
|
|
|
must also include
|
|
|
|
.B CLONE_SIGHAND
|
|
|
|
if
|
|
|
|
.B CLONE_THREAD
|
2014-02-27 08:47:27 +00:00
|
|
|
is specified
|
|
|
|
(and note that, since Linux 2.6.0-test6,
|
|
|
|
.BR CLONE_SIGHAND
|
|
|
|
also requires
|
|
|
|
.BR CLONE_VM
|
|
|
|
to be included).
|
2005-05-17 16:21:20 +00:00
|
|
|
|
|
|
|
Signals may be sent to a thread group as a whole (i.e., a TGID) using
|
|
|
|
.BR kill (2),
|
|
|
|
or to a specific thread (i.e., TID) using
|
|
|
|
.BR tgkill (2).
|
|
|
|
|
|
|
|
Signal dispositions and actions are process-wide:
|
|
|
|
if an unhandled signal is delivered to a thread, then
|
|
|
|
it will affect (terminate, stop, continue, be ignored in)
|
|
|
|
all members of the thread group.
|
|
|
|
|
2005-05-18 08:29:38 +00:00
|
|
|
Each thread has its own signal mask, as set by
|
2005-05-17 16:21:20 +00:00
|
|
|
.BR sigprocmask (2),
|
2006-02-16 04:55:18 +00:00
|
|
|
but signals can be pending either: for the whole process
|
2005-05-17 16:21:20 +00:00
|
|
|
(i.e., deliverable to any member of the thread group),
|
|
|
|
when sent with
|
2006-02-16 04:55:18 +00:00
|
|
|
.BR kill (2);
|
2005-05-17 16:21:20 +00:00
|
|
|
or for an individual thread, when sent with
|
|
|
|
.BR tgkill (2).
|
2005-05-18 08:29:38 +00:00
|
|
|
A call to
|
|
|
|
.BR sigpending (2)
|
|
|
|
returns a signal set that is the union of the signals pending for the
|
|
|
|
whole process and the signals that are pending for the calling thread.
|
2005-05-17 16:21:20 +00:00
|
|
|
|
2007-04-12 22:42:49 +00:00
|
|
|
If
|
2005-05-17 16:21:20 +00:00
|
|
|
.BR kill (2)
|
|
|
|
is used to send a signal to a thread group,
|
|
|
|
and the thread group has installed a handler for the signal, then
|
|
|
|
the handler will be invoked in exactly one, arbitrarily selected
|
|
|
|
member of the thread group that has not blocked the signal.
|
2007-04-12 22:42:49 +00:00
|
|
|
If multiple threads in a group are waiting to accept the same signal using
|
2005-05-17 16:21:20 +00:00
|
|
|
.BR sigwaitinfo (2),
|
|
|
|
the kernel will arbitrarily select one of these threads
|
2007-04-12 22:42:49 +00:00
|
|
|
to receive a signal sent using
|
2005-05-17 16:21:20 +00:00
|
|
|
.BR kill (2).
|
2005-05-10 16:48:27 +00:00
|
|
|
.TP
|
2008-11-18 21:20:54 +00:00
|
|
|
.BR CLONE_UNTRACED " (since Linux 2.5.46)"
|
2005-05-10 16:48:27 +00:00
|
|
|
If
|
2008-11-18 21:20:54 +00:00
|
|
|
.B CLONE_UNTRACED
|
|
|
|
is specified, then a tracing process cannot force
|
|
|
|
.B CLONE_PTRACE
|
|
|
|
on this child process.
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
2013-01-01 06:35:31 +00:00
|
|
|
.BR CLONE_VFORK " (since Linux 2.2)"
|
2008-11-18 21:20:54 +00:00
|
|
|
If
|
|
|
|
.B CLONE_VFORK
|
|
|
|
is set, the execution of the calling process is suspended
|
|
|
|
until the child releases its virtual memory
|
|
|
|
resources via a call to
|
|
|
|
.BR execve (2)
|
|
|
|
or
|
|
|
|
.BR _exit (2)
|
|
|
|
(as with
|
|
|
|
.BR vfork (2)).
|
|
|
|
|
|
|
|
If
|
|
|
|
.B CLONE_VFORK
|
2014-03-26 12:46:48 +00:00
|
|
|
is not set, then both the calling process and the child are schedulable
|
2008-11-18 21:20:54 +00:00
|
|
|
after the call, and an application should not rely on execution occurring
|
|
|
|
in any particular order.
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
2013-01-01 06:35:31 +00:00
|
|
|
.BR CLONE_VM " (since Linux 2.0)"
|
2008-11-18 21:20:54 +00:00
|
|
|
If
|
|
|
|
.B CLONE_VM
|
|
|
|
is set, the calling process and the child process run in the same memory
|
|
|
|
space.
|
|
|
|
In particular, memory writes performed by the calling process
|
|
|
|
or by the child process are also visible in the other process.
|
|
|
|
Moreover, any memory mapping or unmapping performed with
|
|
|
|
.BR mmap (2)
|
|
|
|
or
|
|
|
|
.BR munmap (2)
|
|
|
|
by the child or calling process also affects the other process.
|
|
|
|
|
|
|
|
If
|
|
|
|
.B CLONE_VM
|
|
|
|
is not set, the child process runs in a separate copy of the memory
|
|
|
|
space of the calling process at the time of
|
|
|
|
.BR clone ().
|
|
|
|
Memory writes or file mappings/unmappings performed by one of the
|
|
|
|
processes do not affect the other, as with
|
|
|
|
.BR fork (2).
|
_exit.2, access.2, brk.2, chmod.2, clone.2, epoll_wait.2, eventfd.2, fork.2, getgroups.2, gethostname.2, getpid.2, getpriority.2, killpg.2, mmap.2, poll.2, posix_fadvise.2, pread.2, ptrace.2, readv.2, sched_setaffinity.2, select.2, seteuid.2, setgid.2, setresuid.2, setreuid.2, setuid.2, sigaction.2, signalfd.2, sigpending.2, sigprocmask.2, sigreturn.2, sigsuspend.2, sigwaitinfo.2, stat.2, timer_create.2, uname.2, wait.2, wait4.2, mq_notify.3, mq_open.3, sigqueue.3, man-pages.7: Remove "ABI" from "C library/kernel ABI differences" subheadings
The "ABI" doesn't really convey anything significant in
the title. These subsections are about describing differences
between the kernel and (g)libc interfaces.
Reported-by: Andries E. Brouwer <Andries.Brouwer@cwi.nl>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2015-05-08 11:08:00 +00:00
|
|
|
.SS C library/kernel differences
|
2013-04-16 05:20:17 +00:00
|
|
|
The raw
|
|
|
|
.BR clone ()
|
2004-11-03 13:51:07 +00:00
|
|
|
system call corresponds more closely to
|
|
|
|
.BR fork (2)
|
|
|
|
in that execution in the child continues from the point of the
|
2007-04-12 22:42:49 +00:00
|
|
|
call.
|
2012-07-20 15:08:39 +00:00
|
|
|
As such, the
|
|
|
|
.I fn
|
2007-04-12 22:42:49 +00:00
|
|
|
and
|
2012-07-20 15:08:39 +00:00
|
|
|
.I arg
|
|
|
|
arguments of the
|
|
|
|
.BR clone ()
|
|
|
|
wrapper function are omitted.
|
|
|
|
Furthermore, the argument order changes.
|
2013-04-16 05:12:50 +00:00
|
|
|
The raw system call interface on x86 and many other architectures is roughly:
|
2012-07-20 15:08:39 +00:00
|
|
|
.in +4
|
|
|
|
.nf
|
|
|
|
|
|
|
|
.BI "long clone(unsigned long " flags ", void *" child_stack ,
|
|
|
|
.BI " void *" ptid ", void *" ctid ,
|
|
|
|
.BI " struct pt_regs *" regs );
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2012-07-20 15:08:39 +00:00
|
|
|
.fi
|
|
|
|
.in
|
2013-04-16 05:20:17 +00:00
|
|
|
Another difference for the raw system call is that the
|
2004-11-03 13:51:07 +00:00
|
|
|
.I child_stack
|
2007-04-12 22:42:49 +00:00
|
|
|
argument may be zero, in which case copy-on-write semantics ensure that the
|
2004-11-03 13:51:07 +00:00
|
|
|
child gets separate copies of stack pages when either process modifies
|
2007-04-12 22:42:49 +00:00
|
|
|
the stack.
|
|
|
|
In this case, for correct operation, the
|
2004-11-03 13:51:07 +00:00
|
|
|
.B CLONE_VM
|
|
|
|
option should not be specified.
|
2013-04-16 05:12:50 +00:00
|
|
|
|
2013-04-16 05:20:17 +00:00
|
|
|
For some architectures, the order of the arguments for the system call
|
2013-04-16 05:12:50 +00:00
|
|
|
differs from that shown above.
|
2013-04-19 11:57:07 +00:00
|
|
|
On the score, microblaze, ARM, ARM 64, PA-RISC, arc, Power PC, xtensa,
|
2013-04-16 05:12:50 +00:00
|
|
|
and MIPS architectures,
|
|
|
|
the order of the fourth and fifth arguments is reversed.
|
|
|
|
On the cris and s390 architectures,
|
|
|
|
the order of the first and second arguments is reversed.
|
2013-04-17 05:18:13 +00:00
|
|
|
.SS blackfin, m68k, and sparc
|
|
|
|
The argument-passing conventions on
|
2014-04-22 06:24:49 +00:00
|
|
|
blackfin, m68k, and sparc are different from the descriptions above.
|
2013-04-17 05:18:13 +00:00
|
|
|
For details, see the kernel (and glibc) source.
|
2013-04-17 05:15:23 +00:00
|
|
|
.SS ia64
|
2013-04-16 05:46:12 +00:00
|
|
|
On ia64, a different interface is used:
|
|
|
|
.nf
|
|
|
|
|
|
|
|
.BI "int __clone2(int (*" "fn" ")(void *), "
|
|
|
|
.BI " void *" child_stack_base ", size_t " stack_size ,
|
|
|
|
.BI " int " flags ", void *" "arg" ", ... "
|
|
|
|
.BI " /* pid_t *" ptid ", struct user_desc *" tls \
|
|
|
|
", pid_t *" ctid " */ );"
|
|
|
|
.fi
|
|
|
|
.PP
|
|
|
|
The prototype shown above is for the glibc wrapper function;
|
|
|
|
the raw system call interface has no
|
|
|
|
.I fn
|
|
|
|
or
|
|
|
|
.I arg
|
|
|
|
argument, and changes the order of the arguments so that
|
|
|
|
.I flags
|
|
|
|
is the first argument, and
|
|
|
|
.I tls
|
|
|
|
is the last argument.
|
|
|
|
.PP
|
|
|
|
.BR __clone2 ()
|
|
|
|
operates in the same way as
|
|
|
|
.BR clone (),
|
|
|
|
except that
|
|
|
|
.I child_stack_base
|
|
|
|
points to the lowest address of the child's stack area,
|
|
|
|
and
|
|
|
|
.I stack_size
|
|
|
|
specifies the size of the stack pointed to by
|
|
|
|
.IR child_stack_base .
|
2012-07-20 15:08:39 +00:00
|
|
|
.SS Linux 2.4 and earlier
|
2009-06-21 13:30:21 +00:00
|
|
|
In Linux 2.4 and earlier,
|
|
|
|
.BR clone ()
|
|
|
|
does not take arguments
|
|
|
|
.IR ptid ,
|
|
|
|
.IR tls ,
|
|
|
|
and
|
2009-10-17 04:39:02 +00:00
|
|
|
.IR ctid .
|
getent.1, intro.1, time.1, _exit.2, _syscall.2, accept.2, access.2, acct.2, adjtimex.2, alarm.2, alloc_hugepages.2, arch_prctl.2, bdflush.2, bind.2, brk.2, cacheflush.2, capget.2, chdir.2, chmod.2, chown.2, chroot.2, clock_getres.2, clock_nanosleep.2, clone.2, close.2, connect.2, create_module.2, delete_module.2, dup.2, epoll_create.2, epoll_ctl.2, epoll_wait.2, eventfd.2, execve.2, exit_group.2, faccessat.2, fchmodat.2, fchownat.2, fcntl.2, flock.2, fork.2, fstatat.2, fsync.2, futex.2, futimesat.2, get_kernel_syms.2, get_robust_list.2, get_thread_area.2, getcpu.2, getdents.2, getdomainname.2, getgid.2, getgroups.2, gethostname.2, getitimer.2, getpagesize.2, getpeername.2, getpid.2, getpriority.2, getresuid.2, getrlimit.2, getrusage.2, getsid.2, getsockname.2, getsockopt.2, gettid.2, gettimeofday.2, getuid.2, getunwind.2, getxattr.2, idle.2, init_module.2, inotify_add_watch.2, inotify_init.2, inotify_rm_watch.2, intro.2, io_cancel.2, io_destroy.2, io_getevents.2, io_setup.2, io_submit.2, ioctl.2, ioctl_list.2, ioperm.2, iopl.2, ioprio_set.2, ipc.2, kcmp.2, kill.2, killpg.2, link.2, linkat.2, listen.2, listxattr.2, llseek.2, lookup_dcookie.2, lseek.2, madvise.2, migrate_pages.2, mincore.2, mkdir.2, mkdirat.2, mknod.2, mknodat.2, mlock.2, mmap.2, mmap2.2, modify_ldt.2, mount.2, move_pages.2, mprotect.2, mq_getsetattr.2, mremap.2, msgctl.2, msgget.2, msgop.2, msync.2, nanosleep.2, nfsservctl.2, nice.2, open.2, openat.2, outb.2, pause.2, pciconfig_read.2, perf_event_open.2, perfmonctl.2, personality.2, pipe.2, pivot_root.2, poll.2, posix_fadvise.2, prctl.2, pread.2, process_vm_readv.2, ptrace.2, query_module.2, quotactl.2, read.2, readahead.2, readdir.2, readlink.2, readlinkat.2, readv.2, reboot.2, recv.2, remap_file_pages.2, removexattr.2, rename.2, renameat.2, rmdir.2, rt_sigqueueinfo.2, sched_get_priority_max.2, sched_rr_get_interval.2, sched_setaffinity.2, sched_setparam.2, sched_setscheduler.2, sched_yield.2, select.2, semctl.2, semget.2, semop.2, send.2, sendfile.2, set_thread_area.2, set_tid_address.2, seteuid.2, setfsgid.2, setfsuid.2, setgid.2, setpgid.2, setresuid.2, setreuid.2, setsid.2, setuid.2, setup.2, setxattr.2, shmctl.2, shmget.2, shmop.2, shutdown.2, sigaction.2, sigaltstack.2, signal.2, signalfd.2, sigpending.2, sigprocmask.2, sigreturn.2, sigsuspend.2, sigwaitinfo.2, socket.2, socketcall.2, socketpair.2, splice.2, stat.2, statfs.2, stime.2, swapon.2, symlink.2, symlinkat.2, sync.2, sync_file_range.2, sysctl.2, sysfs.2, sysinfo.2, syslog.2, tee.2, time.2, timerfd_create.2, times.2, tkill.2, truncate.2, umask.2, umount.2, uname.2, unimplemented.2, unlink.2, unlinkat.2, uselib.2, ustat.2, utime.2, utimensat.2, vfork.2, vhangup.2, vm86.2, vmsplice.2, wait.2, wait4.2, write.2, CPU_SET.3, INFINITY.3, MB_CUR_MAX.3, MB_LEN_MAX.3, __setfpucw.3, a64l.3, abort.3, abs.3, acos.3, acosh.3, addseverity.3, adjtime.3, aio_cancel.3, aio_error.3, aio_fsync.3, aio_read.3, aio_return.3, aio_suspend.3, aio_write.3, alloca.3, argz_add.3, asin.3, asinh.3, asprintf.3, assert.3, assert_perror.3, atan.3, atan2.3, atanh.3, atexit.3, atof.3, atoi.3, backtrace.3, basename.3, bcmp.3, bcopy.3, bindresvport.3, bsd_signal.3, bsearch.3, bstring.3, btowc.3, btree.3, byteorder.3, bzero.3, cabs.3, cacos.3, cacosh.3, canonicalize_file_name.3, carg.3, casin.3, casinh.3, catan.3, catanh.3, catgets.3, catopen.3, cbrt.3, ccos.3, ccosh.3, ceil.3, cerf.3, cexp.3, cexp2.3, cfree.3, cimag.3, clearenv.3, clock.3, clock_getcpuclockid.3, clog.3, clog10.3, clog2.3, closedir.3, cmsg.3, confstr.3, conj.3, copysign.3, cos.3, cosh.3, cpow.3, cproj.3, creal.3, crypt.3, csin.3, csinh.3, csqrt.3, ctan.3, ctanh.3, ctermid.3, ctime.3, daemon.3, dbopen.3, des_crypt.3, difftime.3, dirfd.3, div.3, dl_iterate_phdr.3, dlopen.3, dprintf.3, drand48.3, drand48_r.3, dysize.3, ecvt.3, ecvt_r.3, encrypt.3, end.3, endian.3, envz_add.3, erf.3, erfc.3, err.3, errno.3, error.3, ether_aton.3, euidaccess.3, exec.3, exit.3, exp.3, exp10.3, exp2.3, expm1.3, fabs.3, fclose.3, fcloseall.3, fdim.3, fenv.3, ferror.3, fexecve.3, fflush.3, ffs.3, fgetgrent.3, fgetpwent.3, fgetwc.3, fgetws.3, finite.3, flockfile.3, floor.3, fma.3, fmax.3, fmemopen.3, fmin.3, fmod.3, fmtmsg.3, fnmatch.3, fopen.3, fpathconf.3, fpclassify.3, fpurge.3, fputwc.3, fputws.3, fread.3, frexp.3, fseek.3, fseeko.3, ftime.3, ftok.3, fts.3, ftw.3, futimes.3, fwide.3, gamma.3, gcvt.3, getaddrinfo.3, getaddrinfo_a.3, getauxval.3, getcontext.3, getcwd.3, getdate.3, getdirentries.3, getdtablesize.3, getenv.3, getfsent.3, getgrent.3, getgrent_r.3, getgrnam.3, getgrouplist.3, gethostbyname.3, gethostid.3, getipnodebyname.3, getline.3, getloadavg.3, getlogin.3, getmntent.3, getnameinfo.3, getnetent.3, getnetent_r.3, getopt.3, getpass.3, getprotoent.3, getprotoent_r.3, getpt.3, getpw.3, getpwent.3, getpwent_r.3, getpwnam.3, getrpcent.3, getrpcent_r.3, getrpcport.3, gets.3, getservent.3, getservent_r.3, getspnam.3, getttyent.3, getumask.3, getusershell.3, getutent.3, getw.3, getwchar.3, glob.3, grantpt.3, gsignal.3, hash.3, hsearch.3, hypot.3, iconv.3, iconv_close.3, iconv_open.3, ilogb.3, index.3, inet.3, inet_ntop.3, inet_pton.3, infnan.3, initgroups.3, insque.3, intro.3, isalpha.3, isatty.3, isgreater.3, iswalnum.3, iswalpha.3, iswblank.3, iswcntrl.3, iswctype.3, iswdigit.3, iswgraph.3, iswlower.3, iswprint.3, iswpunct.3, iswspace.3, iswupper.3, iswxdigit.3, j0.3, key_setsecret.3, ldexp.3, lgamma.3, lio_listio.3, localeconv.3, lockf.3, log.3, log10.3, log1p.3, log2.3, logb.3, login.3, longjmp.3, lrint.3, lround.3, lsearch.3, lseek64.3, makecontext.3, makedev.3, malloc.3, malloc_hook.3, mblen.3, mbrlen.3, mbrtowc.3, mbsinit.3, mbsnrtowcs.3, mbsrtowcs.3, mbstowcs.3, mbtowc.3, memccpy.3, memchr.3, memcmp.3, memcpy.3, memfrob.3, memmem.3, memmove.3, mempcpy.3, memset.3, mkdtemp.3, mkfifo.3, mkfifoat.3, mkstemp.3, mktemp.3, modf.3, mpool.3, mq_close.3, mq_getattr.3, mq_notify.3, mq_open.3, mq_receive.3, mq_send.3, mq_unlink.3, mtrace.3, nan.3, netlink.3, nextafter.3, nl_langinfo.3, offsetof.3, on_exit.3, opendir.3, openpty.3, perror.3, popen.3, posix_fallocate.3, posix_memalign.3, posix_openpt.3, pow.3, pow10.3, printf.3, profil.3, program_invocation_name.3, psignal.3, pthread_kill_other_threads_np.3, ptsname.3, putenv.3, putgrent.3, putpwent.3, puts.3, putwchar.3, qecvt.3, qsort.3, queue.3, raise.3, rand.3, random.3, random_r.3, rcmd.3, re_comp.3, readdir.3, realpath.3, recno.3, regex.3, remainder.3, remove.3, remquo.3, resolver.3, rewinddir.3, rexec.3, rint.3, round.3, rpc.3, rpmatch.3, rtime.3, rtnetlink.3, scalb.3, scalbln.3, scandir.3, scandirat.3, scanf.3, seekdir.3, sem_close.3, sem_destroy.3, sem_getvalue.3, sem_init.3, sem_open.3, sem_post.3, sem_unlink.3, sem_wait.3, setaliasent.3, setbuf.3, setenv.3, setjmp.3, setlocale.3, setlogmask.3, setnetgrent.3, shm_open.3, siginterrupt.3, signbit.3, significand.3, sigpause.3, sigqueue.3, sigset.3, sigsetops.3, sigvec.3, sin.3, sincos.3, sinh.3, sleep.3, sockatmark.3, sqrt.3, statvfs.3, stdarg.3, stdin.3, stdio.3, stdio_ext.3, stpcpy.3, stpncpy.3, strcasecmp.3, strcat.3, strchr.3, strcmp.3, strcoll.3, strcpy.3, strdup.3, strerror.3, strfmon.3, strfry.3, strftime.3, string.3, strlen.3, strnlen.3, strpbrk.3, strptime.3, strsep.3, strsignal.3, strspn.3, strstr.3, strtod.3, strtoimax.3, strtok.3, strtol.3, strtoul.3, strverscmp.3, strxfrm.3, swab.3, sysconf.3, syslog.3, system.3, sysv_signal.3, tan.3, tanh.3, tcgetpgrp.3, tcgetsid.3, telldir.3, tempnam.3, termios.3, tgamma.3, timegm.3, timeradd.3, tmpfile.3, tmpnam.3, toascii.3, toupper.3, towctrans.3, towlower.3, towupper.3, trunc.3, tsearch.3, ttyname.3, ttyslot.3, tzset.3, ualarm.3, ulimit.3, ungetwc.3, unlocked_stdio.3, unlockpt.3, updwtmp.3, usleep.3, wcpcpy.3, wcpncpy.3, wcrtomb.3, wcscasecmp.3, wcscat.3, wcschr.3, wcscmp.3, wcscpy.3, wcscspn.3, wcsdup.3, wcslen.3, wcsncasecmp.3, wcsncat.3, wcsncmp.3, wcsncpy.3, wcsnlen.3, wcsnrtombs.3, wcspbrk.3, wcsrchr.3, wcsrtombs.3, wcsspn.3, wcsstr.3, wcstoimax.3, wcstok.3, wcstombs.3, wcswidth.3, wctob.3, wctomb.3, wctrans.3, wctype.3, wcwidth.3, wmemchr.3, wmemcmp.3, wmemcpy.3, wmemmove.3, wmemset.3, wordexp.3, wprintf.3, xcrypt.3, xdr.3, y0.3, cciss.4, console.4, console_codes.4, console_ioctl.4, dsp56k.4, fd.4, full.4, hd.4, hpsa.4, initrd.4, intro.4, lp.4, mem.4, mouse.4, null.4, pts.4, ram.4, random.4, rtc.4, sk98lin.4, st.4, tty.4, ttyS.4, tty_ioctl.4, vcs.4, wavelan.4, acct.5, charmap.5, dir_colors.5, filesystems.5, ftpusers.5, group.5, host.conf.5, hosts.5, hosts.equiv.5, intro.5, issue.5, locale.5, motd.5, networks.5, nologin.5, nscd.conf.5, passwd.5, proc.5, protocols.5, resolv.conf.5, rpc.5, securetty.5, services.5, shells.5, termcap.5, ttytype.5, utmp.5, armscii-8.7, arp.7, ascii.7, bootparam.7, capabilities.7, charsets.7, complex.7, cp1251.7, credentials.7, ddp.7, environ.7, epoll.7, fifo.7, futex.7, glob.7, hier.7, icmp.7, inotify.7, intro.7, ip.7, ipv6.7, iso_8859-1.7, iso_8859-10.7, iso_8859-11.7, iso_8859-13.7, iso_8859-14.7, iso_8859-15.7, iso_8859-16.7, iso_8859-2.7, iso_8859-3.7, iso_8859-4.7, iso_8859-5.7, iso_8859-6.7, iso_8859-7.7, iso_8859-8.7, iso_8859-9.7, koi8-r.7, koi8-u.7, locale.7, mailaddr.7, man.7, mq_overview.7, netdevice.7, netlink.7, numa.7, packet.7, path_resolution.7, pipe.7, posixoptions.7, pthreads.7, pty.7, raw.7, regex.7, rtld-audit.7, rtnetlink.7, sem_overview.7, shm_overview.7, sigevent.7, signal.7, socket.7, standards.7, suffixes.7, svipc.7, tcp.7, termio.7, time.7, udp.7, udplite.7, unicode.7, unix.7, uri.7, utf-8.7, x25.7, nscd.8, sync.8, tzselect.8, zdump.8, zic.8: Global fix: remove unneeded double quotes in .SH headings
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-02-24 18:01:36 +00:00
|
|
|
.SH RETURN VALUE
|
2007-05-11 23:07:02 +00:00
|
|
|
.\" gettid(2) returns current->pid;
|
|
|
|
.\" getpid(2) returns current->tgid;
|
2004-11-03 13:51:07 +00:00
|
|
|
On success, the thread ID of the child process is returned
|
2007-04-12 22:42:49 +00:00
|
|
|
in the caller's thread of execution.
|
2008-07-12 11:01:09 +00:00
|
|
|
On failure, \-1 is returned
|
2004-11-03 13:51:07 +00:00
|
|
|
in the caller's context, no child process will be created, and
|
|
|
|
.I errno
|
|
|
|
will be set appropriately.
|
|
|
|
.SH ERRORS
|
|
|
|
.TP
|
|
|
|
.B EAGAIN
|
2014-05-14 04:12:13 +00:00
|
|
|
Too many processes are already running; see
|
|
|
|
.BR fork (2).
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.B EINVAL
|
|
|
|
.B CLONE_SIGHAND
|
|
|
|
was specified, but
|
|
|
|
.B CLONE_VM
|
2007-05-16 04:32:48 +00:00
|
|
|
was not.
|
|
|
|
(Since Linux 2.6.0-test6.)
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.B EINVAL
|
|
|
|
.B CLONE_THREAD
|
|
|
|
was specified, but
|
|
|
|
.B CLONE_SIGHAND
|
2008-06-28 04:57:20 +00:00
|
|
|
was not.
|
|
|
|
(Since Linux 2.5.35.)
|
2006-02-16 04:00:49 +00:00
|
|
|
.\" .TP
|
|
|
|
.\" .B EINVAL
|
|
|
|
.\" Precisely one of
|
|
|
|
.\" .B CLONE_DETACHED
|
|
|
|
.\" and
|
|
|
|
.\" .B CLONE_THREAD
|
2008-06-28 04:57:20 +00:00
|
|
|
.\" was specified.
|
|
|
|
.\" (Since Linux 2.6.0-test6.)
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.B EINVAL
|
2013-03-22 07:14:22 +00:00
|
|
|
.\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71
|
2004-11-03 13:51:07 +00:00
|
|
|
Both
|
|
|
|
.B CLONE_FS
|
|
|
|
and
|
|
|
|
.B CLONE_NEWNS
|
|
|
|
were specified in
|
|
|
|
.IR flags .
|
|
|
|
.TP
|
2013-03-22 07:14:22 +00:00
|
|
|
.BR EINVAL " (since Linux 3.9)"
|
|
|
|
Both
|
|
|
|
.B CLONE_NEWUSER
|
|
|
|
and
|
|
|
|
.B CLONE_FS
|
|
|
|
were specified in
|
|
|
|
.IR flags .
|
|
|
|
.TP
|
2004-11-03 13:51:07 +00:00
|
|
|
.B EINVAL
|
2008-11-19 13:12:00 +00:00
|
|
|
Both
|
2008-11-19 19:15:25 +00:00
|
|
|
.B CLONE_NEWIPC
|
|
|
|
and
|
|
|
|
.B CLONE_SYSVSEM
|
|
|
|
were specified in
|
|
|
|
.IR flags .
|
|
|
|
.TP
|
|
|
|
.B EINVAL
|
2013-03-05 08:55:39 +00:00
|
|
|
One (or both) of
|
2008-11-19 13:12:00 +00:00
|
|
|
.BR CLONE_NEWPID
|
2013-03-05 08:55:39 +00:00
|
|
|
or
|
|
|
|
.BR CLONE_NEWUSER
|
|
|
|
and one (or both) of
|
2008-11-19 13:12:00 +00:00
|
|
|
.BR CLONE_THREAD
|
2013-03-05 08:55:39 +00:00
|
|
|
or
|
|
|
|
.BR CLONE_PARENT
|
2008-11-19 13:12:00 +00:00
|
|
|
were specified in
|
|
|
|
.IR flags .
|
|
|
|
.TP
|
|
|
|
.B EINVAL
|
2007-04-12 22:42:49 +00:00
|
|
|
Returned by
|
2005-06-30 08:58:03 +00:00
|
|
|
.BR clone ()
|
2007-04-12 22:42:49 +00:00
|
|
|
when a zero value is specified for
|
2004-11-03 13:51:07 +00:00
|
|
|
.IR child_stack .
|
|
|
|
.TP
|
2008-11-19 15:01:38 +00:00
|
|
|
.B EINVAL
|
2008-11-19 19:15:25 +00:00
|
|
|
.BR CLONE_NEWIPC
|
|
|
|
was specified in
|
|
|
|
.IR flags ,
|
|
|
|
but the kernel was not configured with the
|
|
|
|
.B CONFIG_SYSVIPC
|
|
|
|
and
|
|
|
|
.BR CONFIG_IPC_NS
|
|
|
|
options.
|
|
|
|
.TP
|
|
|
|
.B EINVAL
|
2008-11-20 17:15:23 +00:00
|
|
|
.BR CLONE_NEWNET
|
|
|
|
was specified in
|
|
|
|
.IR flags ,
|
|
|
|
but the kernel was not configured with the
|
|
|
|
.B CONFIG_NET_NS
|
|
|
|
option.
|
|
|
|
.TP
|
|
|
|
.B EINVAL
|
2008-11-19 15:01:38 +00:00
|
|
|
.BR CLONE_NEWPID
|
|
|
|
was specified in
|
|
|
|
.IR flags ,
|
|
|
|
but the kernel was not configured with the
|
|
|
|
.B CONFIG_PID_NS
|
|
|
|
option.
|
|
|
|
.TP
|
2008-11-19 15:55:24 +00:00
|
|
|
.B EINVAL
|
|
|
|
.BR CLONE_NEWUTS
|
|
|
|
was specified in
|
|
|
|
.IR flags ,
|
|
|
|
but the kernel was not configured with the
|
|
|
|
.B CONFIG_UTS
|
|
|
|
option.
|
|
|
|
.TP
|
2004-11-03 13:51:07 +00:00
|
|
|
.B ENOMEM
|
|
|
|
Cannot allocate sufficient memory to allocate a task structure for the
|
|
|
|
child, or to copy those parts of the caller's context that need to be
|
|
|
|
copied.
|
|
|
|
.TP
|
|
|
|
.B EPERM
|
2008-11-19 19:15:25 +00:00
|
|
|
.BR CLONE_NEWIPC ,
|
2008-11-20 17:15:23 +00:00
|
|
|
.BR CLONE_NEWNET ,
|
2008-11-19 15:55:24 +00:00
|
|
|
.BR CLONE_NEWNS ,
|
|
|
|
.BR CLONE_NEWPID ,
|
2008-11-19 13:12:00 +00:00
|
|
|
or
|
2008-11-19 15:55:24 +00:00
|
|
|
.BR CLONE_NEWUTS
|
2010-01-16 17:24:09 +00:00
|
|
|
was specified by an unprivileged process (process without \fBCAP_SYS_ADMIN\fP).
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.B EPERM
|
|
|
|
.B CLONE_PID
|
|
|
|
was specified by a process other than process 0.
|
2013-02-26 13:02:06 +00:00
|
|
|
.TP
|
|
|
|
.B EPERM
|
|
|
|
.BR CLONE_NEWUSER
|
|
|
|
was specified in
|
|
|
|
.IR flags ,
|
|
|
|
but either the effective user ID or the effective group ID of the caller
|
|
|
|
does not have a mapping in the parent namespace (see
|
2013-02-27 06:40:40 +00:00
|
|
|
.BR user_namespaces (7)).
|
2014-06-02 09:34:27 +00:00
|
|
|
.TP
|
2014-06-02 10:18:46 +00:00
|
|
|
.BR EPERM " (since Linux 3.9)"
|
|
|
|
.\" commit 3151527ee007b73a0ebd296010f1c0454a919c7d
|
2015-01-15 17:20:53 +00:00
|
|
|
.B CLONE_NEWUSER
|
|
|
|
was specified in
|
2014-06-02 10:18:46 +00:00
|
|
|
.I flags
|
|
|
|
and the caller is in a chroot environment
|
|
|
|
.\" FIXME What is the rationale for this restriction?
|
|
|
|
(i.e., the caller's root directory does not match the root directory
|
|
|
|
of the mount namespace in which it resides).
|
|
|
|
.TP
|
|
|
|
.BR EUSERS " (since Linux 3.11)"
|
2014-06-02 09:34:27 +00:00
|
|
|
.B CLONE_NEWUSER
|
|
|
|
was specified in
|
|
|
|
.IR flags ,
|
|
|
|
and the call would cause the limit on the number of
|
|
|
|
nested user namespaces to be exceeded.
|
|
|
|
See
|
|
|
|
.BR user_namespaces (7).
|
2013-02-26 13:02:06 +00:00
|
|
|
.SH VERSIONS
|
|
|
|
There is no entry for
|
|
|
|
.BR clone ()
|
|
|
|
in libc5.
|
|
|
|
glibc2 provides
|
|
|
|
.BR clone ()
|
|
|
|
as described in this manual page.
|
getent.1, intro.1, time.1, _exit.2, _syscall.2, accept.2, access.2, acct.2, adjtimex.2, alarm.2, alloc_hugepages.2, arch_prctl.2, bdflush.2, bind.2, brk.2, cacheflush.2, capget.2, chdir.2, chmod.2, chown.2, chroot.2, clock_getres.2, clock_nanosleep.2, clone.2, close.2, connect.2, create_module.2, delete_module.2, dup.2, epoll_create.2, epoll_ctl.2, epoll_wait.2, eventfd.2, execve.2, exit_group.2, faccessat.2, fchmodat.2, fchownat.2, fcntl.2, flock.2, fork.2, fstatat.2, fsync.2, futex.2, futimesat.2, get_kernel_syms.2, get_robust_list.2, get_thread_area.2, getcpu.2, getdents.2, getdomainname.2, getgid.2, getgroups.2, gethostname.2, getitimer.2, getpagesize.2, getpeername.2, getpid.2, getpriority.2, getresuid.2, getrlimit.2, getrusage.2, getsid.2, getsockname.2, getsockopt.2, gettid.2, gettimeofday.2, getuid.2, getunwind.2, getxattr.2, idle.2, init_module.2, inotify_add_watch.2, inotify_init.2, inotify_rm_watch.2, intro.2, io_cancel.2, io_destroy.2, io_getevents.2, io_setup.2, io_submit.2, ioctl.2, ioctl_list.2, ioperm.2, iopl.2, ioprio_set.2, ipc.2, kcmp.2, kill.2, killpg.2, link.2, linkat.2, listen.2, listxattr.2, llseek.2, lookup_dcookie.2, lseek.2, madvise.2, migrate_pages.2, mincore.2, mkdir.2, mkdirat.2, mknod.2, mknodat.2, mlock.2, mmap.2, mmap2.2, modify_ldt.2, mount.2, move_pages.2, mprotect.2, mq_getsetattr.2, mremap.2, msgctl.2, msgget.2, msgop.2, msync.2, nanosleep.2, nfsservctl.2, nice.2, open.2, openat.2, outb.2, pause.2, pciconfig_read.2, perf_event_open.2, perfmonctl.2, personality.2, pipe.2, pivot_root.2, poll.2, posix_fadvise.2, prctl.2, pread.2, process_vm_readv.2, ptrace.2, query_module.2, quotactl.2, read.2, readahead.2, readdir.2, readlink.2, readlinkat.2, readv.2, reboot.2, recv.2, remap_file_pages.2, removexattr.2, rename.2, renameat.2, rmdir.2, rt_sigqueueinfo.2, sched_get_priority_max.2, sched_rr_get_interval.2, sched_setaffinity.2, sched_setparam.2, sched_setscheduler.2, sched_yield.2, select.2, semctl.2, semget.2, semop.2, send.2, sendfile.2, set_thread_area.2, set_tid_address.2, seteuid.2, setfsgid.2, setfsuid.2, setgid.2, setpgid.2, setresuid.2, setreuid.2, setsid.2, setuid.2, setup.2, setxattr.2, shmctl.2, shmget.2, shmop.2, shutdown.2, sigaction.2, sigaltstack.2, signal.2, signalfd.2, sigpending.2, sigprocmask.2, sigreturn.2, sigsuspend.2, sigwaitinfo.2, socket.2, socketcall.2, socketpair.2, splice.2, stat.2, statfs.2, stime.2, swapon.2, symlink.2, symlinkat.2, sync.2, sync_file_range.2, sysctl.2, sysfs.2, sysinfo.2, syslog.2, tee.2, time.2, timerfd_create.2, times.2, tkill.2, truncate.2, umask.2, umount.2, uname.2, unimplemented.2, unlink.2, unlinkat.2, uselib.2, ustat.2, utime.2, utimensat.2, vfork.2, vhangup.2, vm86.2, vmsplice.2, wait.2, wait4.2, write.2, CPU_SET.3, INFINITY.3, MB_CUR_MAX.3, MB_LEN_MAX.3, __setfpucw.3, a64l.3, abort.3, abs.3, acos.3, acosh.3, addseverity.3, adjtime.3, aio_cancel.3, aio_error.3, aio_fsync.3, aio_read.3, aio_return.3, aio_suspend.3, aio_write.3, alloca.3, argz_add.3, asin.3, asinh.3, asprintf.3, assert.3, assert_perror.3, atan.3, atan2.3, atanh.3, atexit.3, atof.3, atoi.3, backtrace.3, basename.3, bcmp.3, bcopy.3, bindresvport.3, bsd_signal.3, bsearch.3, bstring.3, btowc.3, btree.3, byteorder.3, bzero.3, cabs.3, cacos.3, cacosh.3, canonicalize_file_name.3, carg.3, casin.3, casinh.3, catan.3, catanh.3, catgets.3, catopen.3, cbrt.3, ccos.3, ccosh.3, ceil.3, cerf.3, cexp.3, cexp2.3, cfree.3, cimag.3, clearenv.3, clock.3, clock_getcpuclockid.3, clog.3, clog10.3, clog2.3, closedir.3, cmsg.3, confstr.3, conj.3, copysign.3, cos.3, cosh.3, cpow.3, cproj.3, creal.3, crypt.3, csin.3, csinh.3, csqrt.3, ctan.3, ctanh.3, ctermid.3, ctime.3, daemon.3, dbopen.3, des_crypt.3, difftime.3, dirfd.3, div.3, dl_iterate_phdr.3, dlopen.3, dprintf.3, drand48.3, drand48_r.3, dysize.3, ecvt.3, ecvt_r.3, encrypt.3, end.3, endian.3, envz_add.3, erf.3, erfc.3, err.3, errno.3, error.3, ether_aton.3, euidaccess.3, exec.3, exit.3, exp.3, exp10.3, exp2.3, expm1.3, fabs.3, fclose.3, fcloseall.3, fdim.3, fenv.3, ferror.3, fexecve.3, fflush.3, ffs.3, fgetgrent.3, fgetpwent.3, fgetwc.3, fgetws.3, finite.3, flockfile.3, floor.3, fma.3, fmax.3, fmemopen.3, fmin.3, fmod.3, fmtmsg.3, fnmatch.3, fopen.3, fpathconf.3, fpclassify.3, fpurge.3, fputwc.3, fputws.3, fread.3, frexp.3, fseek.3, fseeko.3, ftime.3, ftok.3, fts.3, ftw.3, futimes.3, fwide.3, gamma.3, gcvt.3, getaddrinfo.3, getaddrinfo_a.3, getauxval.3, getcontext.3, getcwd.3, getdate.3, getdirentries.3, getdtablesize.3, getenv.3, getfsent.3, getgrent.3, getgrent_r.3, getgrnam.3, getgrouplist.3, gethostbyname.3, gethostid.3, getipnodebyname.3, getline.3, getloadavg.3, getlogin.3, getmntent.3, getnameinfo.3, getnetent.3, getnetent_r.3, getopt.3, getpass.3, getprotoent.3, getprotoent_r.3, getpt.3, getpw.3, getpwent.3, getpwent_r.3, getpwnam.3, getrpcent.3, getrpcent_r.3, getrpcport.3, gets.3, getservent.3, getservent_r.3, getspnam.3, getttyent.3, getumask.3, getusershell.3, getutent.3, getw.3, getwchar.3, glob.3, grantpt.3, gsignal.3, hash.3, hsearch.3, hypot.3, iconv.3, iconv_close.3, iconv_open.3, ilogb.3, index.3, inet.3, inet_ntop.3, inet_pton.3, infnan.3, initgroups.3, insque.3, intro.3, isalpha.3, isatty.3, isgreater.3, iswalnum.3, iswalpha.3, iswblank.3, iswcntrl.3, iswctype.3, iswdigit.3, iswgraph.3, iswlower.3, iswprint.3, iswpunct.3, iswspace.3, iswupper.3, iswxdigit.3, j0.3, key_setsecret.3, ldexp.3, lgamma.3, lio_listio.3, localeconv.3, lockf.3, log.3, log10.3, log1p.3, log2.3, logb.3, login.3, longjmp.3, lrint.3, lround.3, lsearch.3, lseek64.3, makecontext.3, makedev.3, malloc.3, malloc_hook.3, mblen.3, mbrlen.3, mbrtowc.3, mbsinit.3, mbsnrtowcs.3, mbsrtowcs.3, mbstowcs.3, mbtowc.3, memccpy.3, memchr.3, memcmp.3, memcpy.3, memfrob.3, memmem.3, memmove.3, mempcpy.3, memset.3, mkdtemp.3, mkfifo.3, mkfifoat.3, mkstemp.3, mktemp.3, modf.3, mpool.3, mq_close.3, mq_getattr.3, mq_notify.3, mq_open.3, mq_receive.3, mq_send.3, mq_unlink.3, mtrace.3, nan.3, netlink.3, nextafter.3, nl_langinfo.3, offsetof.3, on_exit.3, opendir.3, openpty.3, perror.3, popen.3, posix_fallocate.3, posix_memalign.3, posix_openpt.3, pow.3, pow10.3, printf.3, profil.3, program_invocation_name.3, psignal.3, pthread_kill_other_threads_np.3, ptsname.3, putenv.3, putgrent.3, putpwent.3, puts.3, putwchar.3, qecvt.3, qsort.3, queue.3, raise.3, rand.3, random.3, random_r.3, rcmd.3, re_comp.3, readdir.3, realpath.3, recno.3, regex.3, remainder.3, remove.3, remquo.3, resolver.3, rewinddir.3, rexec.3, rint.3, round.3, rpc.3, rpmatch.3, rtime.3, rtnetlink.3, scalb.3, scalbln.3, scandir.3, scandirat.3, scanf.3, seekdir.3, sem_close.3, sem_destroy.3, sem_getvalue.3, sem_init.3, sem_open.3, sem_post.3, sem_unlink.3, sem_wait.3, setaliasent.3, setbuf.3, setenv.3, setjmp.3, setlocale.3, setlogmask.3, setnetgrent.3, shm_open.3, siginterrupt.3, signbit.3, significand.3, sigpause.3, sigqueue.3, sigset.3, sigsetops.3, sigvec.3, sin.3, sincos.3, sinh.3, sleep.3, sockatmark.3, sqrt.3, statvfs.3, stdarg.3, stdin.3, stdio.3, stdio_ext.3, stpcpy.3, stpncpy.3, strcasecmp.3, strcat.3, strchr.3, strcmp.3, strcoll.3, strcpy.3, strdup.3, strerror.3, strfmon.3, strfry.3, strftime.3, string.3, strlen.3, strnlen.3, strpbrk.3, strptime.3, strsep.3, strsignal.3, strspn.3, strstr.3, strtod.3, strtoimax.3, strtok.3, strtol.3, strtoul.3, strverscmp.3, strxfrm.3, swab.3, sysconf.3, syslog.3, system.3, sysv_signal.3, tan.3, tanh.3, tcgetpgrp.3, tcgetsid.3, telldir.3, tempnam.3, termios.3, tgamma.3, timegm.3, timeradd.3, tmpfile.3, tmpnam.3, toascii.3, toupper.3, towctrans.3, towlower.3, towupper.3, trunc.3, tsearch.3, ttyname.3, ttyslot.3, tzset.3, ualarm.3, ulimit.3, ungetwc.3, unlocked_stdio.3, unlockpt.3, updwtmp.3, usleep.3, wcpcpy.3, wcpncpy.3, wcrtomb.3, wcscasecmp.3, wcscat.3, wcschr.3, wcscmp.3, wcscpy.3, wcscspn.3, wcsdup.3, wcslen.3, wcsncasecmp.3, wcsncat.3, wcsncmp.3, wcsncpy.3, wcsnlen.3, wcsnrtombs.3, wcspbrk.3, wcsrchr.3, wcsrtombs.3, wcsspn.3, wcsstr.3, wcstoimax.3, wcstok.3, wcstombs.3, wcswidth.3, wctob.3, wctomb.3, wctrans.3, wctype.3, wcwidth.3, wmemchr.3, wmemcmp.3, wmemcpy.3, wmemmove.3, wmemset.3, wordexp.3, wprintf.3, xcrypt.3, xdr.3, y0.3, cciss.4, console.4, console_codes.4, console_ioctl.4, dsp56k.4, fd.4, full.4, hd.4, hpsa.4, initrd.4, intro.4, lp.4, mem.4, mouse.4, null.4, pts.4, ram.4, random.4, rtc.4, sk98lin.4, st.4, tty.4, ttyS.4, tty_ioctl.4, vcs.4, wavelan.4, acct.5, charmap.5, dir_colors.5, filesystems.5, ftpusers.5, group.5, host.conf.5, hosts.5, hosts.equiv.5, intro.5, issue.5, locale.5, motd.5, networks.5, nologin.5, nscd.conf.5, passwd.5, proc.5, protocols.5, resolv.conf.5, rpc.5, securetty.5, services.5, shells.5, termcap.5, ttytype.5, utmp.5, armscii-8.7, arp.7, ascii.7, bootparam.7, capabilities.7, charsets.7, complex.7, cp1251.7, credentials.7, ddp.7, environ.7, epoll.7, fifo.7, futex.7, glob.7, hier.7, icmp.7, inotify.7, intro.7, ip.7, ipv6.7, iso_8859-1.7, iso_8859-10.7, iso_8859-11.7, iso_8859-13.7, iso_8859-14.7, iso_8859-15.7, iso_8859-16.7, iso_8859-2.7, iso_8859-3.7, iso_8859-4.7, iso_8859-5.7, iso_8859-6.7, iso_8859-7.7, iso_8859-8.7, iso_8859-9.7, koi8-r.7, koi8-u.7, locale.7, mailaddr.7, man.7, mq_overview.7, netdevice.7, netlink.7, numa.7, packet.7, path_resolution.7, pipe.7, posixoptions.7, pthreads.7, pty.7, raw.7, regex.7, rtld-audit.7, rtnetlink.7, sem_overview.7, shm_overview.7, sigevent.7, signal.7, socket.7, standards.7, suffixes.7, svipc.7, tcp.7, termio.7, time.7, udp.7, udplite.7, unicode.7, unix.7, uri.7, utf-8.7, x25.7, nscd.8, sync.8, tzselect.8, zdump.8, zic.8: Global fix: remove unneeded double quotes in .SH headings
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-02-24 18:01:36 +00:00
|
|
|
.SH CONFORMING TO
|
2007-05-18 16:06:42 +00:00
|
|
|
.BR clone ()
|
2013-04-16 05:20:17 +00:00
|
|
|
is Linux-specific and should not be used in programs
|
2007-05-18 16:06:42 +00:00
|
|
|
intended to be portable.
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NOTES
|
2005-05-17 15:06:30 +00:00
|
|
|
In the kernel 2.4.x series,
|
|
|
|
.B CLONE_THREAD
|
|
|
|
generally does not make the parent of the new thread the same
|
|
|
|
as the parent of the calling process.
|
|
|
|
However, for kernel versions 2.4.7 to 2.4.18 the
|
|
|
|
.B CLONE_THREAD
|
|
|
|
flag implied the
|
2007-04-12 22:42:49 +00:00
|
|
|
.B CLONE_PARENT
|
2005-05-17 15:06:30 +00:00
|
|
|
flag (as in kernel 2.6).
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2007-04-12 22:42:49 +00:00
|
|
|
For a while there was
|
|
|
|
.B CLONE_DETACHED
|
2006-09-04 06:57:17 +00:00
|
|
|
(introduced in 2.5.32):
|
2007-04-12 22:42:49 +00:00
|
|
|
parent wants no child-exit signal.
|
2006-09-04 06:57:17 +00:00
|
|
|
In 2.6.2 the need to give this
|
2007-04-12 22:42:49 +00:00
|
|
|
together with
|
|
|
|
.B CLONE_THREAD
|
2006-09-04 06:57:17 +00:00
|
|
|
disappeared.
|
|
|
|
This flag is still defined, but has no effect.
|
|
|
|
|
2007-12-24 17:31:35 +00:00
|
|
|
On i386,
|
2006-02-03 03:32:38 +00:00
|
|
|
.BR clone ()
|
|
|
|
should not be called through vsyscall, but directly through
|
|
|
|
.IR "int $0x80" .
|
2005-04-12 08:11:06 +00:00
|
|
|
.SH BUGS
|
|
|
|
Versions of the GNU C library that include the NPTL threading library
|
2007-04-12 22:42:49 +00:00
|
|
|
contain a wrapper function for
|
2007-05-11 23:07:02 +00:00
|
|
|
.BR getpid (2)
|
2005-04-12 08:11:06 +00:00
|
|
|
that performs caching of PIDs.
|
2008-09-23 03:04:49 +00:00
|
|
|
This caching relies on support in the glibc wrapper for
|
|
|
|
.BR clone (),
|
|
|
|
but as currently implemented,
|
|
|
|
the cache may not be up to date in some circumstances.
|
|
|
|
In particular,
|
|
|
|
if a signal is delivered to the child immediately after the
|
|
|
|
.BR clone ()
|
|
|
|
call, then a call to
|
Changes, clone.2, mount.2, nanosleep.2, sigaltstack.2, statfs.2, timer_settime.2, ctime.3, fmemopen.3, nl_langinfo.3, posix_memalign.3, pthread_attr_init.3, pthread_setaffinity_np.3, pthread_setschedprio.3, pthread_testcancel.3, setjmp.3, sigwait.3, tty_ioctl.4, epoll.7, posixoptions.7, unix.7: Add section number to references to functions documented in other pages
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2010-11-01 07:07:28 +00:00
|
|
|
.BR getpid (2)
|
2008-09-23 03:04:49 +00:00
|
|
|
in a handler for the signal may return the PID
|
|
|
|
of the calling process ("the parent"),
|
2008-11-18 21:21:47 +00:00
|
|
|
if the clone wrapper has not yet had a chance to update the PID
|
2008-09-23 03:04:49 +00:00
|
|
|
cache in the child.
|
|
|
|
(This discussion ignores the case where the child was created using
|
2008-09-25 07:50:14 +00:00
|
|
|
.BR CLONE_THREAD ,
|
2008-09-23 03:04:49 +00:00
|
|
|
when
|
Changes, clone.2, mount.2, nanosleep.2, sigaltstack.2, statfs.2, timer_settime.2, ctime.3, fmemopen.3, nl_langinfo.3, posix_memalign.3, pthread_attr_init.3, pthread_setaffinity_np.3, pthread_setschedprio.3, pthread_testcancel.3, setjmp.3, sigwait.3, tty_ioctl.4, epoll.7, posixoptions.7, unix.7: Add section number to references to functions documented in other pages
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2010-11-01 07:07:28 +00:00
|
|
|
.BR getpid (2)
|
2008-09-23 03:04:49 +00:00
|
|
|
.I should
|
|
|
|
return the same value in the child and in the process that called
|
|
|
|
.BR clone (),
|
2008-09-23 04:55:29 +00:00
|
|
|
since the caller and the child are in the same thread group.
|
2008-09-23 04:58:51 +00:00
|
|
|
The stale-cache problem also does not occur if the
|
2008-09-23 04:55:29 +00:00
|
|
|
.I flags
|
|
|
|
argument includes
|
|
|
|
.BR CLONE_VM .)
|
2008-09-23 03:04:49 +00:00
|
|
|
To get the truth, it may be necessary to use code such as the following:
|
2005-04-12 08:11:06 +00:00
|
|
|
.nf
|
|
|
|
|
|
|
|
#include <syscall.h>
|
|
|
|
|
|
|
|
pid_t mypid;
|
|
|
|
|
|
|
|
mypid = syscall(SYS_getpid);
|
|
|
|
.fi
|
2008-09-23 03:04:49 +00:00
|
|
|
.\" See also the following bug reports
|
|
|
|
.\" https://bugzilla.redhat.com/show_bug.cgi?id=417521
|
|
|
|
.\" http://sourceware.org/bugzilla/show_bug.cgi?id=6910
|
2013-01-01 02:03:43 +00:00
|
|
|
.SH EXAMPLE
|
|
|
|
The following program demonstrates the use of
|
2013-02-12 10:18:34 +00:00
|
|
|
.BR clone ()
|
2013-01-01 02:03:43 +00:00
|
|
|
to create a child process that executes in a separate UTS namespace.
|
|
|
|
The child changes the hostname in its UTS namespace.
|
|
|
|
Both parent and child then display the system hostname,
|
|
|
|
making it possible to see that the hostname
|
|
|
|
differs in the UTS namespaces of the parent and child.
|
|
|
|
For an example of the use of this program, see
|
|
|
|
.BR setns (2).
|
2014-01-05 00:24:26 +00:00
|
|
|
.SS Program source
|
2013-01-01 02:03:43 +00:00
|
|
|
.nf
|
|
|
|
#define _GNU_SOURCE
|
|
|
|
#include <sys/wait.h>
|
|
|
|
#include <sys/utsname.h>
|
|
|
|
#include <sched.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \\
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
static int /* Start function for cloned child */
|
|
|
|
childFunc(void *arg)
|
|
|
|
{
|
|
|
|
struct utsname uts;
|
|
|
|
|
|
|
|
/* Change hostname in UTS namespace of child */
|
|
|
|
|
|
|
|
if (sethostname(arg, strlen(arg)) == \-1)
|
|
|
|
errExit("sethostname");
|
|
|
|
|
2013-01-02 22:13:17 +00:00
|
|
|
/* Retrieve and display hostname */
|
2013-01-01 02:03:43 +00:00
|
|
|
|
|
|
|
if (uname(&uts) == \-1)
|
|
|
|
errExit("uname");
|
|
|
|
printf("uts.nodename in child: %s\\n", uts.nodename);
|
|
|
|
|
|
|
|
/* Keep the namespace open for a while, by sleeping.
|
|
|
|
This allows some experimentation\-\-for example, another
|
|
|
|
process might join the namespace. */
|
2013-01-27 20:28:25 +00:00
|
|
|
|
2013-01-01 02:03:43 +00:00
|
|
|
sleep(200);
|
|
|
|
|
|
|
|
return 0; /* Child terminates now */
|
|
|
|
}
|
|
|
|
|
|
|
|
#define STACK_SIZE (1024 * 1024) /* Stack size for cloned child */
|
|
|
|
|
|
|
|
int
|
|
|
|
main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
char *stack; /* Start of stack buffer */
|
|
|
|
char *stackTop; /* End of stack buffer */
|
|
|
|
pid_t pid;
|
|
|
|
struct utsname uts;
|
|
|
|
|
|
|
|
if (argc < 2) {
|
|
|
|
fprintf(stderr, "Usage: %s <child\-hostname>\\n", argv[0]);
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Allocate stack for child */
|
|
|
|
|
|
|
|
stack = malloc(STACK_SIZE);
|
|
|
|
if (stack == NULL)
|
|
|
|
errExit("malloc");
|
|
|
|
stackTop = stack + STACK_SIZE; /* Assume stack grows downward */
|
|
|
|
|
|
|
|
/* Create child that has its own UTS namespace;
|
|
|
|
child commences execution in childFunc() */
|
|
|
|
|
|
|
|
pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]);
|
|
|
|
if (pid == \-1)
|
|
|
|
errExit("clone");
|
|
|
|
printf("clone() returned %ld\\n", (long) pid);
|
|
|
|
|
|
|
|
/* Parent falls through to here */
|
|
|
|
|
|
|
|
sleep(1); /* Give child time to change its hostname */
|
|
|
|
|
2013-01-27 20:28:25 +00:00
|
|
|
/* Display hostname in parent\(aqs UTS namespace. This will be
|
2013-01-01 02:03:43 +00:00
|
|
|
different from hostname in child\(aqs UTS namespace. */
|
|
|
|
|
|
|
|
if (uname(&uts) == \-1)
|
|
|
|
errExit("uname");
|
|
|
|
printf("uts.nodename in parent: %s\\n", uts.nodename);
|
|
|
|
|
|
|
|
if (waitpid(pid, NULL, 0) == \-1) /* Wait for child */
|
|
|
|
errExit("waitpid");
|
|
|
|
printf("child has terminated\\n");
|
|
|
|
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
}
|
|
|
|
.fi
|
getent.1, intro.1, time.1, _exit.2, _syscall.2, accept.2, access.2, acct.2, adjtimex.2, alarm.2, alloc_hugepages.2, arch_prctl.2, bdflush.2, bind.2, brk.2, cacheflush.2, capget.2, chdir.2, chmod.2, chown.2, chroot.2, clock_getres.2, clock_nanosleep.2, clone.2, close.2, connect.2, create_module.2, delete_module.2, dup.2, epoll_create.2, epoll_ctl.2, epoll_wait.2, eventfd.2, execve.2, exit_group.2, faccessat.2, fchmodat.2, fchownat.2, fcntl.2, flock.2, fork.2, fstatat.2, fsync.2, futex.2, futimesat.2, get_kernel_syms.2, get_robust_list.2, get_thread_area.2, getcpu.2, getdents.2, getdomainname.2, getgid.2, getgroups.2, gethostname.2, getitimer.2, getpagesize.2, getpeername.2, getpid.2, getpriority.2, getresuid.2, getrlimit.2, getrusage.2, getsid.2, getsockname.2, getsockopt.2, gettid.2, gettimeofday.2, getuid.2, getunwind.2, getxattr.2, idle.2, init_module.2, inotify_add_watch.2, inotify_init.2, inotify_rm_watch.2, intro.2, io_cancel.2, io_destroy.2, io_getevents.2, io_setup.2, io_submit.2, ioctl.2, ioctl_list.2, ioperm.2, iopl.2, ioprio_set.2, ipc.2, kcmp.2, kill.2, killpg.2, link.2, linkat.2, listen.2, listxattr.2, llseek.2, lookup_dcookie.2, lseek.2, madvise.2, migrate_pages.2, mincore.2, mkdir.2, mkdirat.2, mknod.2, mknodat.2, mlock.2, mmap.2, mmap2.2, modify_ldt.2, mount.2, move_pages.2, mprotect.2, mq_getsetattr.2, mremap.2, msgctl.2, msgget.2, msgop.2, msync.2, nanosleep.2, nfsservctl.2, nice.2, open.2, openat.2, outb.2, pause.2, pciconfig_read.2, perf_event_open.2, perfmonctl.2, personality.2, pipe.2, pivot_root.2, poll.2, posix_fadvise.2, prctl.2, pread.2, process_vm_readv.2, ptrace.2, query_module.2, quotactl.2, read.2, readahead.2, readdir.2, readlink.2, readlinkat.2, readv.2, reboot.2, recv.2, remap_file_pages.2, removexattr.2, rename.2, renameat.2, rmdir.2, rt_sigqueueinfo.2, sched_get_priority_max.2, sched_rr_get_interval.2, sched_setaffinity.2, sched_setparam.2, sched_setscheduler.2, sched_yield.2, select.2, semctl.2, semget.2, semop.2, send.2, sendfile.2, set_thread_area.2, set_tid_address.2, seteuid.2, setfsgid.2, setfsuid.2, setgid.2, setpgid.2, setresuid.2, setreuid.2, setsid.2, setuid.2, setup.2, setxattr.2, shmctl.2, shmget.2, shmop.2, shutdown.2, sigaction.2, sigaltstack.2, signal.2, signalfd.2, sigpending.2, sigprocmask.2, sigreturn.2, sigsuspend.2, sigwaitinfo.2, socket.2, socketcall.2, socketpair.2, splice.2, stat.2, statfs.2, stime.2, swapon.2, symlink.2, symlinkat.2, sync.2, sync_file_range.2, sysctl.2, sysfs.2, sysinfo.2, syslog.2, tee.2, time.2, timerfd_create.2, times.2, tkill.2, truncate.2, umask.2, umount.2, uname.2, unimplemented.2, unlink.2, unlinkat.2, uselib.2, ustat.2, utime.2, utimensat.2, vfork.2, vhangup.2, vm86.2, vmsplice.2, wait.2, wait4.2, write.2, CPU_SET.3, INFINITY.3, MB_CUR_MAX.3, MB_LEN_MAX.3, __setfpucw.3, a64l.3, abort.3, abs.3, acos.3, acosh.3, addseverity.3, adjtime.3, aio_cancel.3, aio_error.3, aio_fsync.3, aio_read.3, aio_return.3, aio_suspend.3, aio_write.3, alloca.3, argz_add.3, asin.3, asinh.3, asprintf.3, assert.3, assert_perror.3, atan.3, atan2.3, atanh.3, atexit.3, atof.3, atoi.3, backtrace.3, basename.3, bcmp.3, bcopy.3, bindresvport.3, bsd_signal.3, bsearch.3, bstring.3, btowc.3, btree.3, byteorder.3, bzero.3, cabs.3, cacos.3, cacosh.3, canonicalize_file_name.3, carg.3, casin.3, casinh.3, catan.3, catanh.3, catgets.3, catopen.3, cbrt.3, ccos.3, ccosh.3, ceil.3, cerf.3, cexp.3, cexp2.3, cfree.3, cimag.3, clearenv.3, clock.3, clock_getcpuclockid.3, clog.3, clog10.3, clog2.3, closedir.3, cmsg.3, confstr.3, conj.3, copysign.3, cos.3, cosh.3, cpow.3, cproj.3, creal.3, crypt.3, csin.3, csinh.3, csqrt.3, ctan.3, ctanh.3, ctermid.3, ctime.3, daemon.3, dbopen.3, des_crypt.3, difftime.3, dirfd.3, div.3, dl_iterate_phdr.3, dlopen.3, dprintf.3, drand48.3, drand48_r.3, dysize.3, ecvt.3, ecvt_r.3, encrypt.3, end.3, endian.3, envz_add.3, erf.3, erfc.3, err.3, errno.3, error.3, ether_aton.3, euidaccess.3, exec.3, exit.3, exp.3, exp10.3, exp2.3, expm1.3, fabs.3, fclose.3, fcloseall.3, fdim.3, fenv.3, ferror.3, fexecve.3, fflush.3, ffs.3, fgetgrent.3, fgetpwent.3, fgetwc.3, fgetws.3, finite.3, flockfile.3, floor.3, fma.3, fmax.3, fmemopen.3, fmin.3, fmod.3, fmtmsg.3, fnmatch.3, fopen.3, fpathconf.3, fpclassify.3, fpurge.3, fputwc.3, fputws.3, fread.3, frexp.3, fseek.3, fseeko.3, ftime.3, ftok.3, fts.3, ftw.3, futimes.3, fwide.3, gamma.3, gcvt.3, getaddrinfo.3, getaddrinfo_a.3, getauxval.3, getcontext.3, getcwd.3, getdate.3, getdirentries.3, getdtablesize.3, getenv.3, getfsent.3, getgrent.3, getgrent_r.3, getgrnam.3, getgrouplist.3, gethostbyname.3, gethostid.3, getipnodebyname.3, getline.3, getloadavg.3, getlogin.3, getmntent.3, getnameinfo.3, getnetent.3, getnetent_r.3, getopt.3, getpass.3, getprotoent.3, getprotoent_r.3, getpt.3, getpw.3, getpwent.3, getpwent_r.3, getpwnam.3, getrpcent.3, getrpcent_r.3, getrpcport.3, gets.3, getservent.3, getservent_r.3, getspnam.3, getttyent.3, getumask.3, getusershell.3, getutent.3, getw.3, getwchar.3, glob.3, grantpt.3, gsignal.3, hash.3, hsearch.3, hypot.3, iconv.3, iconv_close.3, iconv_open.3, ilogb.3, index.3, inet.3, inet_ntop.3, inet_pton.3, infnan.3, initgroups.3, insque.3, intro.3, isalpha.3, isatty.3, isgreater.3, iswalnum.3, iswalpha.3, iswblank.3, iswcntrl.3, iswctype.3, iswdigit.3, iswgraph.3, iswlower.3, iswprint.3, iswpunct.3, iswspace.3, iswupper.3, iswxdigit.3, j0.3, key_setsecret.3, ldexp.3, lgamma.3, lio_listio.3, localeconv.3, lockf.3, log.3, log10.3, log1p.3, log2.3, logb.3, login.3, longjmp.3, lrint.3, lround.3, lsearch.3, lseek64.3, makecontext.3, makedev.3, malloc.3, malloc_hook.3, mblen.3, mbrlen.3, mbrtowc.3, mbsinit.3, mbsnrtowcs.3, mbsrtowcs.3, mbstowcs.3, mbtowc.3, memccpy.3, memchr.3, memcmp.3, memcpy.3, memfrob.3, memmem.3, memmove.3, mempcpy.3, memset.3, mkdtemp.3, mkfifo.3, mkfifoat.3, mkstemp.3, mktemp.3, modf.3, mpool.3, mq_close.3, mq_getattr.3, mq_notify.3, mq_open.3, mq_receive.3, mq_send.3, mq_unlink.3, mtrace.3, nan.3, netlink.3, nextafter.3, nl_langinfo.3, offsetof.3, on_exit.3, opendir.3, openpty.3, perror.3, popen.3, posix_fallocate.3, posix_memalign.3, posix_openpt.3, pow.3, pow10.3, printf.3, profil.3, program_invocation_name.3, psignal.3, pthread_kill_other_threads_np.3, ptsname.3, putenv.3, putgrent.3, putpwent.3, puts.3, putwchar.3, qecvt.3, qsort.3, queue.3, raise.3, rand.3, random.3, random_r.3, rcmd.3, re_comp.3, readdir.3, realpath.3, recno.3, regex.3, remainder.3, remove.3, remquo.3, resolver.3, rewinddir.3, rexec.3, rint.3, round.3, rpc.3, rpmatch.3, rtime.3, rtnetlink.3, scalb.3, scalbln.3, scandir.3, scandirat.3, scanf.3, seekdir.3, sem_close.3, sem_destroy.3, sem_getvalue.3, sem_init.3, sem_open.3, sem_post.3, sem_unlink.3, sem_wait.3, setaliasent.3, setbuf.3, setenv.3, setjmp.3, setlocale.3, setlogmask.3, setnetgrent.3, shm_open.3, siginterrupt.3, signbit.3, significand.3, sigpause.3, sigqueue.3, sigset.3, sigsetops.3, sigvec.3, sin.3, sincos.3, sinh.3, sleep.3, sockatmark.3, sqrt.3, statvfs.3, stdarg.3, stdin.3, stdio.3, stdio_ext.3, stpcpy.3, stpncpy.3, strcasecmp.3, strcat.3, strchr.3, strcmp.3, strcoll.3, strcpy.3, strdup.3, strerror.3, strfmon.3, strfry.3, strftime.3, string.3, strlen.3, strnlen.3, strpbrk.3, strptime.3, strsep.3, strsignal.3, strspn.3, strstr.3, strtod.3, strtoimax.3, strtok.3, strtol.3, strtoul.3, strverscmp.3, strxfrm.3, swab.3, sysconf.3, syslog.3, system.3, sysv_signal.3, tan.3, tanh.3, tcgetpgrp.3, tcgetsid.3, telldir.3, tempnam.3, termios.3, tgamma.3, timegm.3, timeradd.3, tmpfile.3, tmpnam.3, toascii.3, toupper.3, towctrans.3, towlower.3, towupper.3, trunc.3, tsearch.3, ttyname.3, ttyslot.3, tzset.3, ualarm.3, ulimit.3, ungetwc.3, unlocked_stdio.3, unlockpt.3, updwtmp.3, usleep.3, wcpcpy.3, wcpncpy.3, wcrtomb.3, wcscasecmp.3, wcscat.3, wcschr.3, wcscmp.3, wcscpy.3, wcscspn.3, wcsdup.3, wcslen.3, wcsncasecmp.3, wcsncat.3, wcsncmp.3, wcsncpy.3, wcsnlen.3, wcsnrtombs.3, wcspbrk.3, wcsrchr.3, wcsrtombs.3, wcsspn.3, wcsstr.3, wcstoimax.3, wcstok.3, wcstombs.3, wcswidth.3, wctob.3, wctomb.3, wctrans.3, wctype.3, wcwidth.3, wmemchr.3, wmemcmp.3, wmemcpy.3, wmemmove.3, wmemset.3, wordexp.3, wprintf.3, xcrypt.3, xdr.3, y0.3, cciss.4, console.4, console_codes.4, console_ioctl.4, dsp56k.4, fd.4, full.4, hd.4, hpsa.4, initrd.4, intro.4, lp.4, mem.4, mouse.4, null.4, pts.4, ram.4, random.4, rtc.4, sk98lin.4, st.4, tty.4, ttyS.4, tty_ioctl.4, vcs.4, wavelan.4, acct.5, charmap.5, dir_colors.5, filesystems.5, ftpusers.5, group.5, host.conf.5, hosts.5, hosts.equiv.5, intro.5, issue.5, locale.5, motd.5, networks.5, nologin.5, nscd.conf.5, passwd.5, proc.5, protocols.5, resolv.conf.5, rpc.5, securetty.5, services.5, shells.5, termcap.5, ttytype.5, utmp.5, armscii-8.7, arp.7, ascii.7, bootparam.7, capabilities.7, charsets.7, complex.7, cp1251.7, credentials.7, ddp.7, environ.7, epoll.7, fifo.7, futex.7, glob.7, hier.7, icmp.7, inotify.7, intro.7, ip.7, ipv6.7, iso_8859-1.7, iso_8859-10.7, iso_8859-11.7, iso_8859-13.7, iso_8859-14.7, iso_8859-15.7, iso_8859-16.7, iso_8859-2.7, iso_8859-3.7, iso_8859-4.7, iso_8859-5.7, iso_8859-6.7, iso_8859-7.7, iso_8859-8.7, iso_8859-9.7, koi8-r.7, koi8-u.7, locale.7, mailaddr.7, man.7, mq_overview.7, netdevice.7, netlink.7, numa.7, packet.7, path_resolution.7, pipe.7, posixoptions.7, pthreads.7, pty.7, raw.7, regex.7, rtld-audit.7, rtnetlink.7, sem_overview.7, shm_overview.7, sigevent.7, signal.7, socket.7, standards.7, suffixes.7, svipc.7, tcp.7, termio.7, time.7, udp.7, udplite.7, unicode.7, unix.7, uri.7, utf-8.7, x25.7, nscd.8, sync.8, tzselect.8, zdump.8, zic.8: Global fix: remove unneeded double quotes in .SH headings
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2013-02-24 18:01:36 +00:00
|
|
|
.SH SEE ALSO
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR fork (2),
|
2005-04-11 15:03:38 +00:00
|
|
|
.BR futex (2),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR getpid (2),
|
|
|
|
.BR gettid (2),
|
2012-12-18 17:23:46 +00:00
|
|
|
.BR kcmp (2),
|
2005-04-11 15:10:47 +00:00
|
|
|
.BR set_thread_area (2),
|
2005-04-11 15:03:38 +00:00
|
|
|
.BR set_tid_address (2),
|
2013-01-01 00:09:24 +00:00
|
|
|
.BR setns (2),
|
2005-04-11 15:10:47 +00:00
|
|
|
.BR tkill (2),
|
2006-03-20 21:29:29 +00:00
|
|
|
.BR unshare (2),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR wait (2),
|
2005-06-07 12:35:32 +00:00
|
|
|
.BR capabilities (7),
|
2013-01-13 23:18:46 +00:00
|
|
|
.BR namespaces (7),
|
2005-06-07 12:35:32 +00:00
|
|
|
.BR pthreads (7)
|