La différence entre fork et exec sous Linux : 1. Fork est utilisé pour créer un nouveau processus, appelé processus enfant, tandis que exec remplace tout le contenu du processus actuel par un programme spécifié 2. Les ID de processus avant et après ; exec ne change pas et l'identifiant a changé après que fork ait recréé le processus enfant.
L'environnement d'exploitation de ce tutoriel : système linux7.3, ordinateur Dell G3.
fork et exec sont tous deux des appels liés au processus.
fork
L'appel de fork peut créer un nouveau processus appelé processus enfant, et le processus appelant le fork La fonction est appelée. Tout ce qui concerne le processus parent et le processus enfant est identique à celui du processus parent, à l'exception du pcd (module de contrôle de processus). Si aucun des deux processus n'écrit dans la mémoire, alors les deux processus partagent la page mémoire du processus qui le concerne. appelée fonction fork. En apparence, il semble que le processus créé par fork soit plus rapide que le processus créé par exec. Mais tant que l'un des deux processus modifie la mémoire, la page mémoire sera copiée dans le processus enfant avant. la modification.
exec
Appeler exec pour créer un processus ne crée pas réellement un processus. Pour être plus précis, il s'agit de charger un fichier exécutable. Après avoir appelé exec, le fichier exécutable spécifié dans exec sera chargé dans le. l'espace du processus appelant exec, et le processus appelant exec sera chargé. La mémoire est mise à jour avec le contenu du fichier exécutable spécifié dans exec La différence
fork est principalement conçu pour Linux pour créer de nouveaux processus (threads), tandis que la série de fonctions exec() est utilisée pour spécifier que le programme remplace tout le contenu du processus en cours. Par conséquent, la série de fonctions exec() est souvent appelée après que les trois premières fonctions ont été utilisées pour établir un nouvel environnement d'exécution de programme. Le processus de Linux utilisant le processus init pour démarrer d'autres processus est généralement comme ceci
fork est l'appel le plus simple et ne nécessite aucun paramètre. Il crée simplement un processus enfant et crée un espace indépendant du processus parent. Après avoir utilisé la fonction fork pour créer un nouveau processus, nous appelons souvent la fonction exec dans le nouveau processus pour exécuter un autre programme (par exemple, lorsque nous écrivons un programme, nous devons utiliser la fonction d'un programme que nous avons écrit avant. De cette façon, nous pouvons directement appeler un programme exécutable (cela peut grandement simplifier notre programme). Lorsqu'un processus appelle la fonction exec, le processus est complètement remplacé par un nouveau programme. Étant donné que l’appel de la fonction exec ne crée pas de nouveau processus, les ID des processus précédents et suivants n’ont pas changé. Le processus parent génère un processus enfant identique via fork(). Le processus enfant créé utilise ensuite la fonction exec pour exécuter le processus réel à exécuter, et devient finalement un processus enfant pouvant exécuter certaines fonctions spécifiques. Une fois qu'un processus appelle la fonction de classe exec, il "meurt" lui-même. Le système remplace le segment de code par le code du nouveau programme, supprime le segment de données et le segment de pile d'origine, et alloue de nouveaux segments de données et segments de pile au nouveau programme. La seule chose qui reste dans le segment de pile est le numéro de processus. En d’autres termes, pour le système, c’est toujours le même processus, mais c’est déjà un autre programme. Autrement dit, après avoir appelé la fonction familiale exec, les programmes suivants ne seront pas exécutés. Apprentissage recommandé :Tutoriel vidéo Linux
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!