From owner-dev-commits-src-main@freebsd.org Tue Apr 20 09:58:45 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1B2ED5EEBBB; Tue, 20 Apr 2021 09:58:45 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4FPfJz2cXjz4XSv; Tue, 20 Apr 2021 09:58:43 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.16.1/8.16.1) with ESMTPS id 13K9wXDZ014654 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Tue, 20 Apr 2021 12:58:37 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua 13K9wXDZ014654 Received: (from kostik@localhost) by tom.home (8.16.1/8.16.1/Submit) id 13K9wXHG014653; Tue, 20 Apr 2021 12:58:33 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Tue, 20 Apr 2021 12:58:33 +0300 From: Konstantin Belousov To: Mateusz Piotrowski <0mp@freebsd.org> Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: c4207d867c20 - main - fork.2: Add a simple use pattern Message-ID: References: <202104172113.13HLD6UI014137@gitrepo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <202104172113.13HLD6UI014137@gitrepo.freebsd.org> X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on tom.home X-Rspamd-Queue-Id: 4FPfJz2cXjz4XSv X-Spamd-Bar: - Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none); spf=softfail (mx1.freebsd.org: 2001:470:d5e7:1::1 is neither permitted nor denied by domain of kostikbel@gmail.com) smtp.mailfrom=kostikbel@gmail.com X-Spamd-Result: default: False [-1.51 / 15.00]; ARC_NA(0.00)[]; RBL_DBL_DONT_QUERY_IPS(0.00)[2001:470:d5e7:1::1:from]; DMARC_POLICY_SOFTFAIL(0.10)[gmail.com : No valid SPF, No valid DKIM,none]; RCVD_TLS_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; FREEMAIL_FROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; HAS_XAW(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_SPF_SOFTFAIL(0.00)[~all:c]; NEURAL_SPAM_MEDIUM(0.49)[0.487]; SPAMHAUS_ZRD(0.00)[2001:470:d5e7:1::1:from:127.0.2.255]; TO_DN_SOME(0.00)[]; NEURAL_HAM_SHORT(-1.00)[-1.000]; RBL_SENDERSCORE_FAIL(0.00)[2001:470:d5e7:1::1:server fail]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US]; MIME_TRACE(0.00)[0:+]; MAILMAN_DEST(0.00)[dev-commits-src-all,dev-commits-src-main]; RCVD_COUNT_TWO(0.00)[2] X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Apr 2021 09:58:45 -0000 On Sat, Apr 17, 2021 at 09:13:06PM +0000, Mateusz Piotrowski wrote: > The branch main has been updated by 0mp (doc, ports committer): > > URL: https://cgit.FreeBSD.org/src/commit/?id=c4207d867c201a726aa3157e09262f72166c89c4 > > commit c4207d867c201a726aa3157e09262f72166c89c4 > Author: Mateusz Piotrowski <0mp@FreeBSD.org> > AuthorDate: 2021-04-17 21:10:48 +0000 > Commit: Mateusz Piotrowski <0mp@FreeBSD.org> > CommitDate: 2021-04-17 21:12:06 +0000 > > fork.2: Add a simple use pattern > > It seems to be a nice idea to show how fork() is usually used in > practice. This may act as a guide to developers who want to quickly > recall how to use the fork() function. > > Reviewed by: bcr, yuripv > MFC after: 1 week > Differential Revision: https://reviews.freebsd.org/D27626 > --- > lib/libc/sys/fork.2 | 38 +++++++++++++++++++++++++++++++++++++- > 1 file changed, 37 insertions(+), 1 deletion(-) > > diff --git a/lib/libc/sys/fork.2 b/lib/libc/sys/fork.2 > index 3e55530827c5..d43ade6a483e 100644 > --- a/lib/libc/sys/fork.2 > +++ b/lib/libc/sys/fork.2 > @@ -28,7 +28,7 @@ > .\" @(#)fork.2 8.1 (Berkeley) 6/4/93 > .\" $FreeBSD$ > .\" > -.Dd December 1, 2017 > +.Dd April 17, 2021 > .Dt FORK 2 > .Os > .Sh NAME > @@ -99,6 +99,42 @@ to the parent process, no child process is created, and the global > variable > .Va errno > is set to indicate the error. > +.Sh EXAMPLES > +The following example shows a common pattern of how > +.Fn fork > +is used in practice. > +.Bd -literal -offset indent > +#include > +#include > +#include > +#include > + > +int > +main(void) > +{ > + pid_t pid; > + > + switch (pid = fork()) { > + case -1: > + err(1, "Failed to fork"); > + case 0: > + printf("Hello from child process!\en"); > + exit(0); > + default: > + break; > + } > + > + printf("Hello from parent process (child's PID: %d)!\en", pid); > + > + return (0); > +} > +.Ed > +.Pp > +The output of such a program is along the lines of: > +.Bd -literal -offset indent > +Hello from parent (child's PID: 27804)! > +Hello from child process! > +.Ed > .Sh ERRORS > The > .Fn fork Using printf around fork is not the best idea, and definitely should not be provided as a guiding example in the man page. Using stdio safely around fork() requires at least flushing buffers and ensuring that opened FILEs are in some consistent state right at fork. It would work by chance in your example, mostly because you did not used anything in stdio before fork, but any further changes would result in very puzzling bugs (for beginners, who are the target of this example).