Non mi pare che siano equivalenti perche se dopo la fork il processo attivo diventa il processo filgio, nel secondo caso il tempo rilevato è pari al tempo effettivo per l'esecuzione della fork + il quanto di tempo assegnato al processo filgio prima che il controllo della cpu ritorni al processo padre. Quindi io utilizzerei la prima forma, oppure inserirei le istruzioni
gettimeofday(end, NULL);
forkTime = (end->tv_sec - start->tv_sec) * 1000000 + (end->tv_usec - start->tv_usec); /*Tempo in microsecondi/*
sia nel processo padre che nel processo filgio come prime istruzioni dopo la fork; cosi sia che sia il padre sia che sia il figlio il primo ad essere eseguito dopo la fork viene rilevato il tempo effettivo della fork; di fatti nel primo esempio di codice, anche se il filgio esce immediatamente, la chiusura del processo del figlio comuqnue consuma un po di tempo. Un 'idea puo essere quindi quella di inserire le istruzioni per rilevare il tempo finale anche nel figlio; inoltre il tempo rilevato dal filgio puo essere scritto in un file in modo che se è il filgio il primo a calcolare il tempo di esecuzione, possa comunicarlo al padre scrivendolo in un file appunto. Queste sono considerazioni che pero non tengono affato in conto di come avvine la gestione dei procssi su linux, che in efetti non conosco, non so se ad esempio puoi avere la sicurezza che dopo la fork il controllo passa sempre prima al padre; inoltre devi considerare anche la presenza di altri processi sul sistema che potrebbero sovrapporsi a quelli del tuo programa, anche se mi sembra poco probabile. In linea di masima direi che il primo esempio mi pare piu affidabile.