While reading the help manual for clone.2, I notice that the parent process in the example code does not release the stack of the child process. This is not a problem for the example program, but it is somewhat misleading. Signed-off-by: Chen Linxuan <chenlinxuan@xxxxxxxxxxxxx> --- man/man2/clone.2 | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/man/man2/clone.2 b/man/man2/clone.2 index 3ffe8e7b8..cd63fe0b1 100644 --- a/man/man2/clone.2 +++ b/man/man2/clone.2 @@ -1891,6 +1891,7 @@ main(int argc, char *argv[]) char *stackTop; /* End of stack buffer */ pid_t pid; struct utsname uts; + int savedErrno; \& if (argc < 2) { fprintf(stderr, "Usage: %s <child\-hostname>\[rs]n", argv[0]); @@ -1910,8 +1911,18 @@ main(int argc, char *argv[]) child commences execution in childFunc(). */ \& pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]); - if (pid == \-1) +\& + /* Free child stack, as it is not used by the parent. */ +\& + savedErrno = errno; + if (munmap(stack, STACK_SIZE)) { + warn("munmap"); + } + errno = savedErrno; +\& + if (pid == \-1) { err(EXIT_FAILURE, "clone"); + } printf("clone() returned %jd\[rs]n", (intmax_t) pid); \& /* Parent falls through to here */ -- 2.43.0