On Wed, Jul 27, 2022 at 07:31:11AM +0100, Jason McIntyre wrote:
> On Tue, Jul 26, 2022 at 09:18:47PM -0500, Scott Cheloha wrote:
> > A few improvements I want to make to the sleep(1) manpage.
> > 
> > DESCRIPTION
> > 
> > - "for a minimum of" is better said "for at least".
> > 
> 
> hi.
> 
> i can;t really distinguish between one form being better than the other.
> "until at least" is the posix wording; "for a minimum" the text in
> net/free/open etc.

I am confident "until at least" sounds more natural than "for a
minimum of".

> 
> > - The seconds argument can be zero, so say "non-negative".
> > 
> > - Specify that the number (the whole thing) is decimal to exclude
> >   e.g. hex numbers.  It then follows that the optional fraction
> >   must also be decimal.
> > 
> > - I don't think we need to inspire the reader to use sleep(1) in any
> >   particular way.  We can just demonstrate these patterns in the
> >   Examples provided later.
> > 
> > ASYNCHRONOUS EVENTS
> > 
> > - Note that SIGALRM wakes sleep(1) up "early".
> > 
> > EXAMPLES
> > 
> > - Simplify the first example.  I think parenthetically pointing the
> >   reader to at(1) muddies what ought to be the simplest possible
> >   example.  Scheduling jobs is a way more advanced topic, sleep(1)
> >   is more like a shell primitive.
> > 
> > - Shorten the interval in the first example.  A half hour is not
> >   interactive.
> > 
> > - Get rid of the entire csh(1) example.  It's extremely complex and
> >   the bulk of the text is spent explaining things that aren't about
> >   sleep(1) at all.
> > 
> >   Maybe also of note is that very few other manpages offer csh(1)
> >   examples.  Is there a rule about that?
> > 
> 
> i suppose the dominance of sh has led to examples getting written in this
> style. but that doesn;t mean we have to rewrite all csh examples. i
> think we usually use sh for script examples, but try to make sure that
> all examples work regardless of the user shell.
> 
> you're right that the current section is a bit wordy though.

Alright, I'm leaving it out then.

> > - Tweak the third example to show the reader that you can sleep
> >   for a fraction of a second, as mentioned in the Description.
> > 
> > STANDARDS
> > 
> > - Prefer active voice.
> > 
> >   "The handling of fractional arguments" is better said
> >   "Support for fractional seconds".
> > 
> >   Shorten "is provided as" to "is".
> > 
> > SEE ALSO
> > 
> > - Seems logical to point back to nanosleep(2) and sleep(3).
> > 
> 
> normally we'd try to avoid sending the reader of section1 pages to
> sections 2/3/9. but if there's stuff there that will help the user (not
> code writer) then it'd make sense. is there?

Nope, removed.

> > - Add echo(1) and ls(1) from the EXAMPLES.
> > 
> 
> that's not needed. we don;t add every command listed in the page to SEE
> ALSO. just really pages we think will help people better understand the
> subject they're reading about. so echo(1) does not really help you
> understand sleep(1). however you should leave the reference to at(1) -
> in this case it shows you how to do something like sleep, but better
> suited to some specific tasks.

Okay, I have dropped echo(1) and ls(1) and restored at(1).

> >   ... unsure if we actually need to reference these or if it's
> >   a distraction.  The existing examples make use of awk(1) but
> >   do not Xr it in this section, unsure if there is a rule about
> >   this.
> > 
> > - Add signal(3) because we talk about SIGALRM.
> > 
> 
> again, i think that's outside the scope of sleep(1).

We explicitly mention that sleep(1) has non-standard behavior when
receiving SIGALRM.  It's a feature.  You can use it to, for example,
manually intervene and abbreviate a long delay in a script.

... should I cook up an example with kill(1)?

--

Here's an updated diff.

I have also noted in History that sleep(1) was rewritten for 4.4BSD
(to avoid issues with the AT&T copyright, I assume).  Keith Bostic
committed it, but I don't know if he actually rewrote it.

Index: sleep.1
===================================================================
RCS file: /cvs/src/bin/sleep/sleep.1,v
retrieving revision 1.22
diff -u -p -r1.22 sleep.1
--- sleep.1     16 Aug 2016 18:51:25 -0000      1.22
+++ sleep.1     27 Jul 2022 18:35:02 -0000
@@ -45,58 +45,27 @@
 .Sh DESCRIPTION
 The
 .Nm
-utility
-suspends execution for a minimum of the specified number of
-.Ar seconds .
-This number must be positive and may contain a decimal fraction.
-.Nm
-is commonly used to schedule the execution of other commands (see below).
+utility suspends execution until at least the given number of
+.Ar seconds
+have elapsed.
+.Ar seconds
+must be a non-negative decimal value and may contain a fraction.
 .Sh ASYNCHRONOUS EVENTS
 .Bl -tag -width "SIGALRMXXX"
 .It Dv SIGALRM
-Terminate normally, with a zero exit status.
+Terminate early, with a zero exit status.
 .El
 .Sh EXIT STATUS
 .Ex -std sleep
 .Sh EXAMPLES
-Wait a half hour before running the script
-.Pa command_file
-(see also the
-.Xr at 1
-utility):
+Wait five seconds before running a command:
 .Pp
-.Dl (sleep 1800; sh command_file >& errors)&
+.Dl $ sleep 5 ; echo Hello, World!
 .Pp
-To repetitively run a command (with
-.Xr csh 1 ) :
+List a file twice per second:
 .Bd -literal -offset indent
-while (! -r zzz.rawdata)
-       sleep 300
-end
-foreach i (*.rawdata)
-       sleep 70
-       awk -f collapse_data $i >> results
-end
-.Ed
-.Pp
-The scenario for such a script might be: a program currently
-running is taking longer than expected to process a series of
-files, and it would be nice to have another program start
-processing the files created by the first program as soon as it is finished
-(when
-.Pa zzz.rawdata
-is created).
-The script checks every five minutes for this file.
-When it is found, processing is done in several steps
-by sleeping 70 seconds between each
-.Xr awk 1
-job.
-.Pp
-To monitor the growth of a file without consuming too many resources:
-.Bd -literal -offset indent
-while true; do
-       ls -l file
-       sleep 5
+while ls -l file; do
+       sleep 0.5
 done
 .Ed
 .Sh SEE ALSO
@@ -108,10 +77,16 @@ utility is compliant with the
 .St -p1003.1-2008
 specification.
 .Pp
-The handling of fractional arguments is provided as an extension to that
-specification.
+Support for fractional
+.Ar seconds
+is an extension to that specification.
 .Sh HISTORY
 A
 .Nm
-utility appeared in
+utility first appeared in
 .At v4 .
+.Pp
+This implementation of
+.Nm
+first appeared in
+.Bx 4.4 .

Reply via email to