stu@jpusa1.UUCP (Stu Heiss) (07/20/86)
I've been using a spooling/unbatching scheme for incoming news that can (and does) lose an article due to inability to fork under heavy load. The fragment in question looks like: cd $Xqtdir ls -tr 2>/dev/null | while : do read FILE case "$FILE" in '') /bin/rm $LOCKFILE exit 0 ;; news.*) # invoke inews with the article $lib/rnews < $FILE 2>>$errlog; /bin/rm $FILE ;; esac done and the problem is if inews fails to fork but rm does, the article gets dropped. This brings up the more general question of how can you tell, within a shell script, whether the last process was able to fork? I can't tell from the manuals whether this is possible or not. Anybody know how to do this or get around this problem? You cant do something simple like: inews < file && rm file since inews will return various error codes normally. What to do? -- Stu Heiss {ihnp4!jpusa1!stu}
gwyn@brl-smoke.ARPA (Doug Gwyn ) (07/20/86)
The SVR2 Bourne shell goes into an exponential backoff retry mode when an attempt to fork fails. Sometimes this is a good idea and sometimes it is incredibly stupid (consider what happens on an overloaded system running several shell scripts; as soon as one fails to fork, it will probably never succeed until long after the load drops back to normal).