Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment imposer l'execution d'un programme dans un temps imparti ?

3 réponses
Avatar
Erwann
Bonjour,

J'ai un programme principal qui appel un autre programme a l'aide de la fonction
system(x) de la stdlib. L'appel a cette fonction est bloquant, c'est-a-dire que
le programme principal attend la fin de l'execution du programme passe en
parametre (x) pour continuer son deroulement.

J'aimerais que le programme x s'arrete au bout d'un temps donne dans le programme
principal. C'est la le hic. Je ne connais pas le PID du programme x, je ne peux
donc pas lui envoyer de signal. Un fork() n'est pas vraiment possible puisque
le programme x n'a rien a voir avec le programme principal.

Y'a-t-il une solution simple permettant de recurperer le PID du programme x,
ou alors un autre fonction que system() qui permette ce genre de chose ?

--
Erwann

3 réponses

Avatar
DINH Viêt Hoà

Y'a-t-il une solution simple permettant de recurperer le PID du programme x,
ou alors un autre fonction que system() qui permette ce genre de chose ?


<HS>
Puisque tu parles de PID et de fork(), je suppose que tu es sous un Unix.
Il faut savoir que system() sous Unix est souvent implémenté grâce à
fork().
Et qu'il y a la fonction exec() pour remplacer le programme courant par
un autre.

soit :

pid = fork();
if (pid == 0) {
exec(...);
exit(EXIT_FAILURE);
}
else if (pid != -1) {
printf("pid du fils : %i", pid);
}
else {
fprintf(stderr, "fork() failed");
}
</HS>

--
DINH V. Hoa,

<< mon chef est venu me chercher à la machine à café l'autre jour:
"je savais bien que je vous trouverais ici" >> -- s.

Avatar
Sebastien Decugis
Salut!

J'ai un morceau de code qui pourrait te servir probablement:
http://nptl.bullopensource.org/phpBB/viewtopic.php?t%

c'est en anglais mais si ça te pose un probleme je peux te fournir plus
d'informations.

Seb.


Erwann wrote:

Bonjour,

J'ai un programme principal qui appel un autre programme a l'aide de la fonction
system(x) de la stdlib. L'appel a cette fonction est bloquant, c'est-a-dire que
le programme principal attend la fin de l'execution du programme passe en
parametre (x) pour continuer son deroulement.

J'aimerais que le programme x s'arrete au bout d'un temps donne dans le programme
principal. C'est la le hic. Je ne connais pas le PID du programme x, je ne peux
donc pas lui envoyer de signal. Un fork() n'est pas vraiment possible puisque
le programme x n'a rien a voir avec le programme principal.

Y'a-t-il une solution simple permettant de recurperer le PID du programme x,
ou alors un autre fonction que system() qui permette ce genre de chose ?





Avatar
Erwann
Merci a tous les deux pour vos propositions.

En fait, vous avez raison, ce n'etait pas bien complique, il suffisait
juste de jouer un peu avec les exec* !

Mais j'ai essaye autre chose juste apres avoir poste mon message.
Effectivement Viêt Hoà, je suis sous Unix et je suis donc passe par
l'intermediaire d'un script shell. Cela donne a peu pres ceci :

<code>
prog_limite_temps &

for ((i = 0 ; i != $TEMPS ; i++)) ;
do
sleep 1
done

kill -2 $!
</code>

la derniere commande envoie le signal SIGINT au dernier programme lance
en arriere-plan ($!). Ca m'evite d'avoir a modifier mon programme en C
et prog_limite_temps avait deja ete concu pour reagir specialement au
SIGINT (il effectue quelques taches de nettoyage avant de se fermer).

Merci de votre aide !

--
Erwann