I've been gradually making progress on bug 1254 as a background task. However, today it threw a last curve ball when I was working on an update to the description of set -b ...
That description includes this near the end: When the shell notifies the user a job has been completed, it may remove the job's process ID from the list of those known in the current shell execution environment This conflicts with 2.9.3.1 Asynchronous Lists which says that IDs remain known until: 1. The command terminates and the application waits for the process ID. 2. Another asynchronous list is invoked before "$!" (corresponding to the previous asynchronous list) is expanded in the current execution environment. Then there is the following in the APPLICATION USAGE for wait: Historical implementations of interactive shells have discarded the exit status of terminated background processes before each shell prompt. Therefore, the status of background processes was usually lost unless it terminated while wait was waiting for it. This could be a serious problem when a job that was expected to run for a long time actually terminated quickly with a syntax or initialization error because the exit status returned was usually zero if the requested process ID was not found. This volume of POSIX.1-202x requires the implementation to keep the status of terminated jobs available until the status is requested, so that scripts like: [...] work without losing status on any of the jobs. My initial reaction to this was that the above quote from set -b is likely a left-over from before the decision to disallow the historical remove-before-prompting behaviour was made. However, then I spotted that the text from wait, which seems to be an attempt to justify that decision, first says it was historical behaviour for *interactive* shells but then talks about the problems it could cause for *scripts*. So it seems to me that the justification does not stand up to scrutiny. It also appears that dash still implements remove-before-prompting. There would seem to be two options to resolve this: A. Uphold the decision to disallow remove-before-prompting. This would mean removing the conflicting text from set -b and updating the justification on the wait page to something that holds water. (And dash would need to change in order to conform.) B. Allow remove-before-prompting. This would mean changing 2.9.3.1 to add a third list item (for interactive shells only) and deleting the above quoted text from the wait page. I'm particularly interested to get the opinions of shell authors on this. -- Geoff Clare <g.cl...@opengroup.org> The Open Group, Apex Plaza, Forbury Road, Reading, RG1 1AX, England