(a) On appelle fork un divorce au sein d'un projet. Les gens se séparent et gardent chacun une copie des sources qu'ils feront évoluer en parallèle, en concurrence. Un fork doit être motivé : les mailings listes discutent des raisons évoquées par chaque partie. Les développeurs tranchent et choisissent de se ranger dans un camp ou dans un autre. Le fork peut être amical ou orageux.
Certains forks échouent : la libc du noyau Linux, par exemple.
(b) fork() est un appel système C qui a pour fonction de dupliquer un processus. Le code exécutable reste identique dans les deux processus issus du fork. Les données sont aussi identiques à une exception près : la valeur renvoyé par l'appel système. Ce qui permet de distinguer les processus entre eux, et de faire un branchement.
int main()
{
pid_t pid;
printf("debut\n");
if (pid=fork())
{
printf("je suis le processus pere.\n");
printf("et voici mon fils: %d.\n" , pid);
}
else
{
printf("je suis le processus fils (%d).\n" , pid);
}
printf("fin\n");
}
$ gcc fork.c
$ ./a.out
debut
je suis le processus pere.
je suis le processus fils (0).
fin
et voici mon fils: 20541.
fin
[^] # Re: Keith Packard viré de XFree86
Posté par cornofulgur . En réponse à la dépêche Keith Packard viré de XFree86. Évalué à 7.
Certains forks échouent : la libc du noyau Linux, par exemple.
(b) fork() est un appel système C qui a pour fonction de dupliquer un processus. Le code exécutable reste identique dans les deux processus issus du fork. Les données sont aussi identiques à une exception près : la valeur renvoyé par l'appel système. Ce qui permet de distinguer les processus entre eux, et de faire un branchement.
$ cat fork.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid;
printf("debut\n");
if (pid=fork())
{
printf("je suis le processus pere.\n");
printf("et voici mon fils: %d.\n" , pid);
}
else
{
printf("je suis le processus fils (%d).\n" , pid);
}
printf("fin\n");
}
$ gcc fork.c
$ ./a.out
debut
je suis le processus pere.
je suis le processus fils (0).
fin
et voici mon fils: 20541.
fin