On Sun, Dec 27, 2020 at 08:02:49AM -0500, Eli Schwartz wrote: > I'm not sure I understand the question?
My interpretation is that for an async *simple* command of the form cmd args & where cmd cannot be executed at all (due to lack of permissions, perhaps, or because the external program is not installed), they want bash to set $? to a nonzero value to indicate that the command couldn't even be started. I've seen similar requests several times over the years. The problem is that the parent bash (the script) doesn't know, and cannot know, that the command was stillborn. Only the child bash process can know this, and by the time this information has become available, the parent bash process has already moved on. The only way the parent can obtain this information is to wait until that information becomes available. The obvious problem here is that the parent does not know when that information will become available. So, one is stuck choosing from among the following strategies: 1) After launching the async command, sleep for some fraction of a second, and then check whether the child is still running. If it isn't running, retrieve its exit status. 2) Set up a SIGCHLD handler (trap), and process the child's exit status whenever the trap fires. 3) Poll "kill -0" on the child's PID during the script's main loop. Each of these strategies has its advantages and flaws. None of them is correct for every script.