No, the else you have at present needs a copy of everything you have at present
Code:
pipe()
fork()
if ( p == 0 ) {
  // dup(), and run a process
} else {
  pipe()
  fork()
  if ( p == 0 ) {
    // dup(), and run a process
  } else {
    // dup(), and run another
  }
}