Easy:

  • If you're immediately going to exec*(), with no system call in between, you can use vfork().
  • If you plan to run something which might do a system call (this includes *printf(), of course), use fork().
  • In particular, if you're not exec*()ing, use fork().
  • If you're at all unsure, use fork().