[c++] execl() / fermer un processus

Flow31- Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous !

j'ai deux trois questions de c++ :

j'utilise la fonction execl() pour ouvrir un programme : pas de problème, sauf qu'il me ferme l'ancien.
Comment faire pour que execl() ouvre le programme dans une autre fenêtre pour que celui-ci continue ?

Et comment faire pour fermer ce programme ? car là, il devra aller dans les processus le chercher, non?

Han je galère depuis ce weekend :/

Merci !

7 réponses

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Les fonctions de type 'exec' (qui ne sont pas ISO) ont pour but de remplacer le programme existant par un autre; donc si l'on veut que le programme existant se poursuive il faut choisir une autre fonction.
Dès lors, il y a deux solutions:
- 'system' qui permet de lancer un autre programme, mais on attend alors la fin de ce programme pour poursuivre le programme principal,
- 'fork' qui permet de lancer un autre processus dans lequel on pourra alors lancer un autre programme.
Je ne parle pas des 'threads' qui ne sont pas une bonne solution à ce problème.
Bonne continuation.
2
Flow31- Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   10
 
Merci.

maintenant je pourrai bien essayer de kill un processus,

je vous tiens au courant !
1
Flow31- Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   10
 
je suis tombé sur cette source :

#include <sys/types.h>

switch(fork())
{
	case -1 : perror("Probleme fork); exit(1);
	case 0: //tu es dans le fils fais ce que tu veux
	execl ("C:\\Documents and Settings\\florian\\Mes documents\\lossbot\\bin\\Debug\\intro.exe",0);
	exit(1);
	defaut :
}


et ... fork was not declared in this scope

J'utilise Codeblocks et je cherche de l'aide pour la déclarer...Merci
1
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
sous windows, utilise spawn à la place de exec. Regarde les doc sur MSDN.
Sous Linux fork() doit exister, il faut trouver où.
Sous Mac, HP, SUN, BSD etc. Je ne sais pas.
1
Fred
 
Non, sous Windows, on utilise depuis 20 ans l'api Win32 Kernel, jamais spawn()
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > Fred
 
Pourquoi laisser la fonction alors si il ne faut pas l'utiliser ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Ah oui, sous Windows, 'fork' n'existe pas.
Toutefois dans l'API tu dois avoir ces deux fonctions: CreateProcess et CreateThread.
Je n'en sais pas plus.
1
Flow31- Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   10
 
J'utilise spawnlp() (meme si je suis pas au point avec les options de spawn() )

une idée pour kill un processus ?!
1
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Avec spawn tu doit avoir le numéro de processus. Après il doit bien exister une fonction. Cherche dans le MSDN, je ne connais pas. Sous Linux il y a kill() dans signal.h.
1