A buggy program
Consider the following (contrived) program which starts a
background process to create a file and then waits while the background
process is still running before checking to see if the file exists:
#!/bin/sh
# Make sure file doesn't exist.
rm -f file
# Create file in a background process.
touch file &
# While there is a touch process running...
while ps -C "touch" > /dev/null
do
# ... wait one second for it to complete.
sleep 1
done
# Check if file was created.
if [ -f file ]
then
echo "Of course it worked."
else
echo "Huh? File wasn't created."
# Wait for background tasks to complete.
wait
if [ -f file ]
then
echo "Now it's there!"
else
echo "File never created."
fi
fi
# Clean up.
rm -f file
Naturally, it will always output "Of course it worked."
,
right? Run it in a terminal yourself to confirm this.
But I claimed this program is buggy; there's more going on.