in reply to system() call failure

Your argument for system() may be processed by a shell. In that case you'll get two processes, not one. (Wheras fork() and exec() would give you only one new process.)

On further thought, your fork() and exec() tests were run in the same script under the same conditions, right? Where I'm going is that the target user may have had reached its process limits where in testing you (personally) still have processes left.