А, что насчет этого? Вроде меня все устраивает , но пиды  выводятся  через 3. 
pid_t pid[3]= {0,0,0};
  for (int i=0; i<3; ++i) {
    pid[i] = fork();
    if (pid[i] == -1){
      perror("fork");
    } else {
      if (pid[i] == 0) {
           switch(i){
           case 0:
           {
                const char*path = "/usr/games/sol";
                char*const args[] = {"sol",NULL};
                execv(path,args);
                exit(0);
            break;
            }
            case 1:
            {
                const char*path = "/usr/games/gnome-mines";
                char*const args[] = {"gnome-mines",NULL};
                execv(path,args);
                exit(0);
            break;
            }
            case 2:{
                const char*path = "/usr/games/gnome-mahjongg";
                char*const args[] = {"gnome-mahjongg",NULL};
                execv(path,args);
                exit(0);
            break;
            }
                }
      } else {
        sleep(1);
        printf("PID of child process is %d\n", pid[i]);
      }
    }
  }
    for(int i = 2; i >= 0; i--)
    {
    sleep(1);
    kill(pid[i],SIGTERM);
    }
    return 0;