Summary:
* It's a bash bug, not a cygwin bug.
* defining RECYCLES_PIDS in execute_cmd.c solves the problem.
* RECYCLES_PID is intended for LynxOs, which recycles pids
quickly according to a comment in execute_cmd.c
* All OS are potentially affected, bash basically assumes
that 2 pid values are never identical.
It seems that there are 2 possible solutions:
A) enable RECYCLES_PID in bash.
* I'd propose that, minimal patch attached.
B) work around the bash bug in cygwin.
fork.cc already contains a special function that prevents 2
consecutive fork() calls from reusing the same pid:
slow_pid_reuse().
This may have been what I was running into as well. See