Plus précisément, nous pouvons dire que l'utilisation de l'appel du système Exec remplacera l'ancien fichier ou le programme du processus par un nouveau fichier ou un nouveau programme. L'ensemble du contenu du processus est remplacé par un nouveau programme.
Le segment de données utilisateur qui exécute l'appel système EXEC () est remplacé par le fichier de données dont le nom est fourni dans l'argument lors de l'appel exec ().
Le nouveau programme est chargé dans le même espace de processus. Le processus actuel est simplement transformé en un nouveau processus et donc le processus de processus n'est pas modifié, c'est parce que nous ne créons pas un nouveau processus que nous remplaçons simplement un processus par un autre processus dans EXEC.
Si le processus en cours d'exécution contient plus d'un thread, tous les threads seront terminés et la nouvelle image de processus sera chargée puis exécutée. Il n'y a pas de fonctions de destructeur qui terminent les threads du processus actuel.
Le PID du processus n'est pas modifié mais les données, le code, la pile, le tas, etc. du processus sont modifiés et sont remplacés par ceux du processus nouvellement chargé. Le nouveau processus est exécuté à partir du point d'entrée.
EXEC System Call est une collection de fonctions et dans C Langage de programmation C, les noms standard de ces fonctions sont les suivants:
Il convient de noter ici que ces fonctions ont la même base exécutif suivi d'une ou plusieurs lettres. Ceux-ci sont expliqués ci-dessous:
E: Il s'agit d'un tableau de pointeurs qui pointe vers des variables d'environnement et qui est transmis explicitement au processus nouvellement chargé.
L: l est pour les arguments de ligne de commande transmis une liste à la fonction
P: P est la variable d'environnement de chemin qui aide à trouver le fichier passé comme un argument à charger dans le processus.
V: V est pour les arguments de la ligne de commande. Ceux-ci sont passés comme un tableau de pointeurs vers la fonction.
Pourquoi l'exec est utilisé?
Exec est utilisé lorsque l'utilisateur souhaite lancer un nouveau fichier ou un nouveau programme dans le même processus.
Fonctionnement intérieur de l'exec
Considérez les points suivants pour comprendre le fonctionnement de l'exec:
Syntaxes des fonctions de la famille Exec:
Voici les syntaxes de chaque fonction d'EXEC:
int execl (const char * path, const char * arg,…)Description:
Le type de retour de ces fonctions est int. Lorsque l'image de processus est remplacée avec succès, rien n'est renvoyé à la fonction d'appel parce que le processus qui l'appelle ne s'exécute plus. Mais s'il y a une erreur -1 sera retourné. Si une erreur se produit errer est réglé.
Dans la syntaxe:
Pour utiliser les fonctions de la famille Exec, vous devez inclure le fichier d'en-tête suivant dans votre programme C:
#inclureExemple 1: Utilisation du programme Système Exec dans C Programme
Considérez l'exemple suivant dans lequel nous avons utilisé l'appel du système EXEC dans la programmation C dans Linux, Ubuntu: nous avons deux fichiers C ici exemple.C et bonjour.C:
CODE:
#inclureCODE:
#inclureSORTIR:
Pid d'exemple.c = 4733Dans l'exemple ci-dessus, nous avons un exemple.C fichier C et bonjour.c fichier. Dans l'exemple .C Fichier C Tout d'abord, nous avons imprimé l'ID du processus actuel (exemple de fichier.C est en cours d'exécution en cours). Ensuite, dans la ligne suivante, nous avons créé un tableau de pointeurs de personnages. Le dernier élément de ce tableau devrait être nul comme point de terminaison.
Ensuite, nous avons utilisé la fonction execv () qui prend le nom de fichier et le tableau de pointeur de caractère comme argument. Il convient de noter ici que nous avons utilisé ./ avec le nom du fichier, il spécifie le chemin du fichier. Comme le fichier est dans le dossier où l'exemple.C réside donc il n'est pas nécessaire de spécifier le chemin complet.
Lorsque la fonction EXECV () est appelée, notre image de processus sera remplacée maintenant l'exemple de fichier.C n'est pas dans le processus mais le fichier bonjour.C est dans le processus. On peut voir que l'ID de processus est le même si bonjour.C est l'image de processus ou l'exemple.C est l'image de processus car le processus est le même et l'image de processus est uniquement remplacée.
Ensuite, nous avons une autre chose à noter ici qui est l'instruction printf () après que Execv () ne soit pas exécuté. En effet. Le contrôle ne revient qu'à la fonction d'appel lors du remplacement de l'image du processus. (La valeur de retour est -1 dans ce cas).
Différence entre les appels système Fork () et Exec ():
L'appel système Fork () est utilisé pour créer une copie exacte d'un processus en cours et la copie créée est le processus enfant et le processus en cours est le processus parent. Tandis que l'appel système exécutif est utilisé pour remplacer une image de processus par une nouvelle image de processus. Il n'y a donc aucun concept de processus parent et enfant dans l'appel du système exec ().
Dans le système Fork () appelez les processus parent et enfants sont exécutés en même temps. Mais dans EXEC () Call System, si le remplacement de l'image de processus est réussi, le contrôle ne revient pas à l'endroit où la fonction Exec a été appelée plutôt qu'elle exécutera le nouveau processus. Le contrôle ne sera transféré que s'il y a une erreur.
Exemple 2: combinaison des appels système fork () et exec ()
Considérez l'exemple suivant dans lequel nous avons utilisé les appels système Fork () et Exec () dans le même programme:
CODE:
#inclureCODE:
#inclureSORTIR:
Pid d'exemple.c = 4790Dans cet exemple, nous avons utilisé l'appel système Fork (). Lorsque le processus de l'enfant est créé, 0 sera affecté à P, puis nous passerons au processus de l'enfant. Maintenant, le bloc des instructions avec if (p == 0) sera exécuté. Un message s'affiche et nous avons utilisé l'appel système execv () et l'image actuelle du processus enfant qui est un exemple.C sera remplacé par Hello.c. Avant que les processus EXECV () appellent l'enfant et les parents.
On peut voir que le pid d'exemple.C et bonjour.C est différent maintenant. C'est parce que l'exemple.C est l'image du processus parent et bonjour.C est l'image du processus d'enfant.