IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ CConsultez toutes les FAQ

Nombre d'auteurs : 35, nombre de questions : 194, dernière mise à jour : 18 février 2018  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience personnelle des auteurs.

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci .

Sur ce, je vous souhaite une bonne lecture.

SommaireDiversGestion des processus (2)
précédent sommaire suivant
 

Les fonctions de la famille exec (qui sont standardisées par POSIX) permettent de charger puis de lancer un nouveau processus. Le nouveau processus est placé dans la mémoire précédemment occupée par l'ancien processus.

Code c : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h> 
#include <unistd.h> /* <process.h> sous DOS/Windows */ 
#include <string.h> 
  
int main(void) 
{ 
    char path[256], *p, *argv[2]; 
  
    printf("Tapez le chemin vers le programme a executer : "); 
    fgets(path, sizeof(path), stdin); 
    if ((p = strchr(path, '\n')) != NULL) 
        *p = '\0'; 
  
    argv[0] = path; 
    argv[1] = NULL; 
    execv(path, argv); 
  
    printf("La fonction execv a echoue.\n"); 
  
    return 0; 
}
Si vous avez un compilateur C/C++ moderne et que vous êtes sous Windows, préférez les noms _exec* (par exemple _execv) aux noms POSIX exec* sauf si vous voulez avoir un code unique pour les deux systèmes.

Mis à jour le 23 mars 2009 Melem

Sur les systèmes de type UNIX, à l'aide de fork + exec et sous DOS/Windows, à l'aide de spawn (ou directement avec l'API CreateProcess). Avec un compilateur C/C++ moderne, préférez les noms spawn* aux anciens noms spawn*.

fork permet à un processus de se dupliquer en deux processus exactement identiques sur le prochain code à exécuter, sur les valeurs des variables (ceci inclut aussi le gestionnaire de signaux), mais pas sur les locks mémoire, les compteurs de temps ou sur les signaux en attente.

Code c : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h> 
#include <unistd.h> 
  
int main(void) 
{ 
    pid_t pid = fork(); 
  
    /* Le deuxième processus reprend à partir d'ici. */ 
  
    if (pid == -1) { 
        /* Erreur */ 
    } else if (pid == 0) { 
        /* On est dans le fils. */ 
        /* Il ne reste plus qu'à faire un exec pour charger le processus qu'on veut exécuter. */ 
    } else { 
        /* On est dans le père. */ 
        /* On peut attendre la fin du processus fils avant de continuer à l'aide de la fonction waitpid. */ 
    } 
  
    return 0; 
}
Sous Windows (_P_WAIT n'étant pas définie sous DOS ...) :

Code c : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h> 
#include <process.h> 
  
int main(void) 
{ 
    const char * argv[] = {"hello", NULL}; 
  
    printf("Bonjour.\n"); 
  
    _spawnvp(_P_WAIT, "hello.exe", argv); /* Attendre la fin de hello.exe avant de continuer. */ 
  
    printf("Au revoir.\n"); 
  
    return 0; 
}

Mis à jour le 23 mars 2009 Davidbrcz Melem publicStaticVoidMain

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.