Fork+exec ?

Signaler
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015
-
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015
-
Bonjour,
je bosse sous Linux (g++) avec Qt (mais du C ou du C++ standard peut très bien faire l'affaire) et voudrais que mon programme lance un autre programme (par exemple une calculatrice) en étant parent de celui-ci.

Par exemple mon prog lance la calculette et continue de tourner. Quand on ferme mon prog la calculatrice doit être détruite aussi.

J'ai essayé avec fork et execve sans succes mais peut-être m'en suis-je mal servi ?
Mon prog de test :

int main()
{
int pid = fork();

if ( pid == -1 )
{
fprintf( stderr, "Erreur\n" );
return (-1);
}

if ( pid )
{
execve("/bin/ls", 0, 0);
}
else
{
printf("c'est le pere\n");
while(1){}
}
}

Mais le listing ne s'affiche pas (et si jamais je lance qqc de graphique comme le calculette -> segmentation fault).
En plus ça me fait un processus qui tourne derrière et que je ne sais pas arreter...

Heeeelp... pliz

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac

6 réponses

Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
1
SI tu utilise Qt, QProcess suffit

tu lance ta commande, puis tu connect le signal processExited() pour savoir quand il finit. Et la tu ferme.
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
1
SI tu utilise Qt, QProcess suffit

tu lance ta commande, puis tu connect le signal processExited() pour savoir quand il finit. Et la tu ferme.
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
1
SI tu utilise Qt, QProcess suffit

tu lance ta commande, puis tu connect le signal processExited() pour savoir quand il finit. Et la tu ferme.
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

Mais avec QProcess mon process n'est pas le process parent

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
1
ah... désolé, je ne savais pas

Mais c'est réelement important ? je ne voit pas spécialement ce que ca apporte vu que QProcess te permet de garder le controle (mais javoue que je suis pas spécialement compétant dans ce domaine...)
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

Finalement j'ai réussi avec fork+execv

L'avantage d'être parent d'un autre process c'est que si le père meurt il tue ses enfants.
Par exemple en cas de plantage du père, les processus qu'il a créé ne continuent pas à exister et à travailler pour rien.

Par exemple un prog de type explorer. Il utilise un processus qui indexe tous les fichiers du disque en parallèle (processus fils). Si le père meurt il faut que l'indexation s'arrete aussi (sinon le processeur va etre ralenti pour rien).

Je reconnais que les exemples sont rares mais en l'occurrence j'en avais vraiment besoin

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac