title: capability of `posix_spawn`
body: <p>I'm writing a small program which is somewhat a server that spawns its client programs (locally, not over the network) and do interesting things between them. While my primary OS in use is Linux, I expect this to run on other OSes including Windows. There is <code>fork</code> and <code>exec</code> which does the job, but when I port the program to Windows via cygwin, I don't want that crappy <code>fork</code> implemented in cygwin to kick in, which actually calls <code>CreateProcess</code> and copies the current process's memory area to the new process using <code>setjmp</code>/<code>longjmp</code> with shared memory mutexes, all of this in order to be replaced with another program (<code>exec</code>). While reading the FAQ page of cygwin I discovered <code>spawn.h</code> and its <code>posix_spawn</code>, which basically looks like <code>CreatePorcess(Ex)</code> in windows. It seems like a new feature (... I mean not one of the original UNIX system functions), so I have some questions upon it.</p>
  
  <ol>
  <li><p>Is it implemented well, widely? (I saw some posts on the internet that it is not defined under his/her system.)</p></li>
  <li><p>Can I expect any performance improvement or deterioration by using <code>posix_spawn</code> instead of <code>fork</code>/<code>exec</code> in Linux?</p></li>
  <li><p>Why is <code>posix_spawn</code> less known and less used than <code>fork</code>/<code>exec</code> although being standard since 1999?</p></li>
  </ol>