А, что насчет этого? Вроде меня все устраивает , но пиды выводятся через 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;