Почему процесс child выполняет неожиданную строку?

Итак, я узнаю, как работают процессы, и написал простой код.

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int SemId;
void SemGet(int n)
{
   SemId = semget(IPC_PRIVATE, n, 0600);
   if (SemId == -1) {
      exit(1);
   }
}
int SemSetVal(int SemNum, int SemVal)
{
   return semctl(SemId, SemNum, SETVAL, SemVal);
}
int SemOp(int SemNum, int SemOp)
{
   struct sembuf SemBuf;
   SemBuf.sem_num = SemNum;
   SemBuf.sem_op  = SemOp;
   SemBuf.sem_flg = 0;
   return semop(SemId, & SemBuf, 1);
}
void SemRemove(void)
{
   (void) semctl(SemId, 0, IPC_RMID, 0);
}

void child(int vchild) {
    printf("\nChild %d", vchild);
    return;
}

int main(int argc, char** argv) {
    printf("\nHeeeyoooo!");

    if (fork() == 0) {
        child(1);
        exit(0);
    }
    (void) wait(NULL);
    printf("\nParent.");

    return 0;
}

и что я получаю за вывод

Heeeyoooo!
Child 1Heeeyoooo!
Parent.
Process returned 0 (0x0)   execution time : 0.001 s
Press ENTER to continue.

Почему я получаю "heyooo" дважды? Мне кажется, что ребенок возвращается в главное, а не прекращается при выходе ...

Ответы на вопрос(2)

Ваш ответ на вопрос