> There's a race between the shell writing the final command-line to > the pipe and the SIGPIPE being delivered, [...]
Is there? My understanding is that the SIGPIPE is generated within the write() call, and it is noticed and delivered in the syscall exit codepath. If so, the signal-generating write should never return as far as userland is concerned. The ktrace log quoted upthread shows the syscall returning >> 3406 3406 make-2025.02.24. CALL write(1,0x70addd3fda00,0x1f) >> 3406 3406 make-2025.02.24. RET write -1 errno 32 Broken pipe >> 3406 3406 make-2025.02.24. PSIG SIGPIPE SIG_DFL: code=SI_NOINFO but this is meaningless; ktrace /bin/sh -c 'kill -KILL $$' also shows kill(2) returning - presumably the ktrace record is written before the syscall exit path tears down the process due to the signal. /~\ The ASCII Mouse \ / Ribbon Campaign X Against HTML mo...@rodents-montreal.org / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B