On Mon, Nov 7, 2022 at 9:03 PM Bart Schaefer wrote: > > I'm sure someone is going to explain to me why the following is wrong. Nobody has, yet. However, after thinking for a while about this: > What happens with the patch below is that in the right side of the > pipeline, after the new subshell is created upon ^Z, "fg" resumes the > previous foreground job (the earlier job in the right-side brace > construct) and the new subshell remains stopped until that job > finishes, at which point it is resumed and proceeds with the next job > in the braces. ... it occurred to me that it might be accomplishing a superset of this from 50874: + /* + * If we're in shell jobs on the right side of a pipeline + * we should treat it like a job in the current shell. + */ + if (inforeground == 2) + inforeground = 1; ... and indeed, if I remove that bit of 50874 I'm still able to do ^Z/fg and ^C in all the previously hanging or re-suspending examples. I like that there doesn't seem to be as much of a magic bullet as that seemed to be. Patch attached.