Bonjour,

Je souhaite faire un programme C qui lance un commande shell.
Si celle ci c'est bien déroulée, j'ai une action à faire.
Si au bout d'un certain temps, le script ne s'est pas finit, je souhaite l'arrêter et retourner à mon C.

En utilisant un fork et un exec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
for(;;)
 Si tacheEnCours
     si timeout
       kill(pid)  
 else
  LanceNouvelleTache(*pid)
     {pid=fork 
       fils:system(monProgrammeUnix)
       pere:return
     }
Le problème est que le fork fait un process intermediaire et c'est celui ci qui meurt lors du kill...donc le programme lancé par system devient orphelin!

J'ai essayé aussi avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
fork
  fils:execv(monProgrammeUnix)
  pere: wait(&child_status);
Mais je ne sais pas où mettre mon timeout sachant que execv ne revient pas au fils et que le wait attend sagement et ne permet pas d'autre action...

Quelle pourraient être la solution?

Merci d'avance