--Lorsque vous exécutez la fonction fork (), un processus enfant est généré à partir du processus parent.
fork.c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
static void child()
{
printf("Child. pid: %d.\n", getpid());
exit(EXIT_SUCCESS);
}
static void parent(pid_t pid_child)
{
printf("Parent. parent's pid: %d. child's pid: %d\n", getpid(), pid_child);
exit(EXIT_SUCCESS);
}
int main()
{
pid_t pid;
pid = fork();
if(pid == -1) err(EXIT_FAILURE, "fork() failed");
//Le processus enfant a une valeur de retour de 0
if(pid == 0)
child();
//L'ID de processus du processus enfant dont la valeur de retour est le processus parent(> 0)
else
parent(pid);
}
Parent. parent's pid: 27701. child's pid: 27702
Child. pid: 27702.
Vous pouvez voir que les processus enfants sont générés à partir du processus parent et que chacun a un ID de processus différent
--Le noyau exécute le processus selon le flux suivant
execve.c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
static void child()
{
char *args[] = {"/bin/echo", "Bonjour", NULL};
printf("child. child's pid: %d.\n", getpid());
execve("/bin/echo", args, NULL);
err(EXIT_FAILURE, "execve() failed");
}
static void parent(pid_t pid_child)
{
printf("parent. parent's pid: %d. child's pid: %d\n", getpid(), pid_child);
exit(EXIT_SUCCESS);
}
int main(void)
{
pid_t pid;
pid = fork();
if(pid == -1)
err(EXIT_FAILURE, "fork() failed");
if(pid == 0)
child();
else
parent(pid);
}
parent. parent's pid: 28034. child's pid: 28035
child. child's pid: 28035.
Bonjour
Une fois que le processus s'est branché avec la fonction fork (), vous pouvez voir que / bin / echo est exécuté par la fonction execve () dans le processus enfant.
Recommended Posts