On 12/2/2013 13:30, Warren Young wrote: > On 12/2/2013 12:56, Christopher Faylor wrote: >> On Mon, Dec 02, 2013 at 12:35:00PM -0700, Warren Young wrote: >>> This happens because POSIX PIDs are in a table that lives in >>> cygwin1.dll's memory space, and because there are two DLLs, there are >>> two different PID tables. >> >> Actually POSIX pids are Windows PIDs. The distinction becomes fuzzy >> after an exec, though, where the Cygwin PID continues to be the PID >> of the process which previously exec'ed it. > > Of the four PID values this pair of programs prints, shouldn't at least > two should be the same, then? I get four different values here: > > PARENT: My PID is 5048; created child PID 5684 > CHILD: My PID is 3108; my parent's PID is 1. I've modified the test programs a bit. The parent can launch either a 32- or 64-bit child, and I've modified the two processes' output so they're easier to distinguish. Run without args, parent64 still runs child32, but you can now pass "64" (i.e. "./parent64 64") to make it run the new child64 program. When you do that, the output is completely sensible, unlike with the mixed bitness case: PARENT64: My PID is 8808; created child PID 3480. CHILD64: My PID is 3480; my parent's PID is 8808. Also, doesn't the fact that procps only shows processes running under the current Cygwin DLL indicate that the process table is DLL-specific?