Sponsored Content
Full Discussion: POSIX compliance...
Operating Systems OS X (Apple) POSIX compliance... Post 302976998 by Don Cragun on Sunday 10th of July 2016 05:29:56 PM
Old 07-10-2016
Quote:
Originally Posted by wisecracker
Well I have been experimenting with sleep <secs> to give me a smaller time accurate to about + or - 5mS on this MacBook Pro, OSX 10.7.5.

It would be good enough for the Egg_Timer.sh and passes the ShellCheck test.

It is fully posix compliant with SLEEPs unity seconds timer only.

Boy am I gonna get some flak over this one, (yes I bend the rules a little)... ;o)
Code:
#!/bin/sh
# delay.sh <secs> <millisecs[0-999]>
secs="$1"
millisecs=$( awk -v mS="$2" -v correction=0.94 ' BEGIN { print (( mS / 2 ) * correction ); } ' )
millisecs="${millisecs%.*}"

# Accuracy on my MBP OSX 10.7.5 + or - 5mS of FSD.
mS()
{
	loop=0
	while [ "$loop" -le "$millisecs" ]
	do
		sleep 0
		wait
		loop=$(( loop + 1 ))
	done
}
# Test the mS function only.
time mS
sleep "$secs"

As I quoted in a previous post I could create a resonably accurate timer using 'afplay', 'aplay' or '/dev/dsp'. I might use afplay and make it Apple dedicated...

Thanks Don for the info...

I await the flak... ;o)
I'm not sure if this is flak or not, but I'm not sure that I understand what this script is trying to do.

Just using POSIX-defined features in your shell script does not mean that your shell script will give you the same results on all POSIX-conforming systems.

If the idea is to sleep for a particular number of seconds and milliseconds on OS X version 10.7.5 with the particular amount and type of memory present on your system with the same CPU you're using and with the same disk drive you're using under similar load conditions, the code above might come close to doing what you want. But, for small sub-second sleeps, the amount of time spent forking and execing awk and sleep may overwhelm your other calculations. And, if you invoke this script several times, the first time it runs is likely to be slower than subsequent runs since awk, sleep, and this script will need to be loaded from disk the first time it runs, while subsequent runs in the not too distant future can be loaded from the cache.

So, although the way you are performing the calculations in this script is portable, the calculations you are performing are not portable to any other hardware and software configuration because what you are really calculating is how long it will take to fork(), exec sleep, run sleep 0, and waitpid() for the exit status from the sleep 0. All of this is very dependent on your hardware and is not portable to any different configuration. Note also that the wait in your loop is a relatively quick no-op. The wait would only take any significant amount of time if your script had started background jobs that had not previously been waited for. (Your script never starts any background jobs, so all the wait built-in does is loop through the zero background jobs running in the current shell waiting for each one to complete before it returns a zero exit status.)

Although:
Code:
sleep sss.mmm

where sss is a given number of seconds and mmm is a given number of milliseconds to sleep is not portable between various systems, it is portable and will give you much more consistent sleep times between various versions of hardware running various versions of OS X (at least for releases of OS X greater than or equal to 10.0). It will also work on other BSD or Linux based systems and, if you use a 1993 or later ksh instead of bash, on any system using that shell. (ksh93 has a built-in sleep that accepts fractional seconds; bash version 3.2.57 does not have a built-in sleep on OS X.)

If you want a portable way to sleep for a given number of seconds and nano-seconds in a shell script that will work on any POSIX-conforming system, you'll need to write your own nanosleep utility in C that calls the nanosleep() function with the seconds and nanoseconds specified by operands given when it is invoked and then call that utility from your script. Or you can configure your script to invoke the system's sleep utility if it supports sub-second sleeps, or invoke your nanosleep utility otherwise.
This User Gave Thanks to Don Cragun For This Post:
 

5 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

sudo & Sox compliance

Hello, I am trying to convince my boss to stop allowing our users to login as root (superuser). Currently our users login to our unix server with their own account, then as needed, they will do an su and put in the root password. This scares me, for a bunch of reasons. Mainly, one is that we... (1 Reply)
Discussion started by: rwallaceisg
1 Replies

2. UNIX for Dummies Questions & Answers

man synopsis standard compliance

In different online sources, I found bits and pieces of information about those square and angular brackets and pipes. From what I have read, I can conclude it looks like this: 1. Options outside any brackets are mandatory 2. Options inside these < .. > are mandatory too 3. Options inside ... (4 Replies)
Discussion started by: vkleban
4 Replies

3. Cybersecurity

PCI DSS Compliance : Insecure Communication Has Been Detected

From the nessus scanner tool report i got below vulnerability PCI DSS Compliance : Insecure Communication Has Been Detected http://www.tenable.com/plugins/index.php?view=single&id=56208 As per the description given in above link - I am not able to understand How to find insecure port... (2 Replies)
Discussion started by: saurabh84g
2 Replies

4. Red Hat

Looking for PCI Compliance tool for Redhat Lix.

Hi i am in new to Linux world . I have been assigned to a project to find out a tool that will fulfill the PCI compliance for Linux servers for Audit process. anyone have any recommendation on that. Do Rad hat have any native application or plug-ins which we can use for that. (1 Reply)
Discussion started by: sahasuman
1 Replies

5. HP-UX

Password compliance setting

I need to set password compliance for some servers in my company. However, the requirements are that we need to set different password policies for 3 different user groups within the company. These are : System Users: i.e root, etc Batch/Application Users: oracle, bscs, etc Standard User:... (0 Replies)
Discussion started by: anaigini45
0 Replies
All times are GMT -4. The time now is 02:09 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy