La fonction fork()
Anonyme09
-
Anonyme09 -
Anonyme09 -
Bonjour,
Je voudrais savoir comment le système d’exploitation affecte les PID au processus père et fils.
J'ai ce programme et je n'arrive pas a comprendre comment on a affecté les PID
Si on prend le pid du processus main 2400, on aurait
Les fils du 2400 sont ceux de (1) normalement 2404 sera le processus fils du 2402 et pas 2400 ???
SVP aidez moi et merci par avance.
Je voudrais savoir comment le système d’exploitation affecte les PID au processus père et fils.
J'ai ce programme et je n'arrive pas a comprendre comment on a affecté les PID
for(fork();(getpid()%2==0)&&(i<4); (i++,fork()))
Si on prend le pid du processus main 2400, on aurait
2400
2401 2402 2403 2404 2405 (1)
2406 2407 2408 2409 (2)
2410 2411 (3)
2412
Les fils du 2400 sont ceux de (1) normalement 2404 sera le processus fils du 2402 et pas 2400 ???
SVP aidez moi et merci par avance.
A voir également:
- La fonction fork()
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
4 réponses
bonsoir, que ne comprends-tu pas?
les pid n'ont pas de signification, chaque processus du système doit simplement avoir un pid unique, différent des pid de celui de chacun des autres processus.
les pid n'ont pas de signification, chaque processus du système doit simplement avoir un pid unique, différent des pid de celui de chacun des autres processus.
Un processus avec un pid pair fait : fork() N fois.
Un processus avec un pid impair a le test faux et s'arrête.
Pour le processus initial i vaut 0 1 2 3 4 donc N vaut 5, il aura 5 fils.
Pour un processus fils, i pars du i du père jusqu'à 4
L'exercice n'a pas de sens comme l'a déjà dit ElementW. C'est une grave erreur d'incompréhension de ce qu'est un processus!
Un processus avec un pid impair a le test faux et s'arrête.
Pour le processus initial i vaut 0 1 2 3 4 donc N vaut 5, il aura 5 fils.
Pour un processus fils, i pars du i du père jusqu'à 4
pere pid2400,i=0 -> fils pid2401,i=0 -> pid2401,stop pere pid2400,i=1 -> fils pid2402,i=1 Mais ici 2 process sont en concurrence fils pid2402,i=1 -> petit-fils pidXXXX,i=1 pere pid2400,i=2 -> fils pidYYYY,i=2Impossible de savoir celui qui sera le premier! L'un produira le pid2403 qui s'arrête, et l'autre le pid2404. Mais sera-ce "petit-fils pid2404,i=1" ou "fils pid2404,i=2" ? C'est ce que tu as dis, on ne peut pas savoir si 2404 sera fils de 2400 ou de 2402.
L'exercice n'a pas de sens comme l'a déjà dit ElementW. C'est une grave erreur d'incompréhension de ce qu'est un processus!
Bonjour,
Les PID sont uniques pour l'ensemble du système d'exploitation, donc d'autres programmes qui s'exécutent en même temps possèdent également des PID dont les valeurs ne pourront pas être données à ton programme.
La seule valeur importante dans le fork c'est le 0, ça te permet de distinguer si tu es dans le processus père ou le processus fils, pour le reste la valeur du PID n'a aucune importance, ils sont juste uniques pour les processus vivants à un instant donné.
À lire : que fait un fork ?
Les PID sont uniques pour l'ensemble du système d'exploitation, donc d'autres programmes qui s'exécutent en même temps possèdent également des PID dont les valeurs ne pourront pas être données à ton programme.
La seule valeur importante dans le fork c'est le 0, ça te permet de distinguer si tu es dans le processus père ou le processus fils, pour le reste la valeur du PID n'a aucune importance, ils sont juste uniques pour les processus vivants à un instant donné.
À lire : que fait un fork ?
'lut,
non seulement comme le dit yg_be les PID n'ont pas de réelle signification,
en plus, à moins que tu ne sois sur un UNIX(-like) temps réel (indice: ce n'est pas ton cas), l'attribution des PID est faite au hasard dans la hiérarchie des processus car tu n'as aucune garantie de quel process va fork() avant l'autre.
L'ordonnanceur (scheduler) se réserve le droit d'exécuter tel ou tel process dans l'ordre qu'il veut, potentiellement en parallèle dans le cas d'un système multi-cœur, avec un ordre d'exécution allant, pour un ensemble de processus connus, de quasi-prévisible (pour
from human import idiocy
del idiocy
non seulement comme le dit yg_be les PID n'ont pas de réelle signification,
en plus, à moins que tu ne sois sur un UNIX(-like) temps réel (indice: ce n'est pas ton cas), l'attribution des PID est faite au hasard dans la hiérarchie des processus car tu n'as aucune garantie de quel process va fork() avant l'autre.
L'ordonnanceur (scheduler) se réserve le droit d'exécuter tel ou tel process dans l'ordre qu'il veut, potentiellement en parallèle dans le cas d'un système multi-cœur, avec un ordre d'exécution allant, pour un ensemble de processus connus, de quasi-prévisible (pour
SCHED_DEADLINE) à beaucoup plus hasardeux pour Completely Fair Scheduler.
from human import idiocy
del idiocy
Salut,
Au faite, c'est un exercice
int i=0;
for(fork(); ((getpid()%2 ==0)&&(i<4); (i++,fork()));
while(wait(NULL)!=-1);
on suppose que le pid du processus correspond a ce programme est 2400 et la numérotation des processus est séquentielle
donnez le résultat à l'exécution.
normalement il nous donne l'arbre que j'ai présenté mais j'ai pas compris comment affecter les num du PIDs.
Au faite, c'est un exercice
int i=0;
for(fork(); ((getpid()%2 ==0)&&(i<4); (i++,fork()));
while(wait(NULL)!=-1);
on suppose que le pid du processus correspond a ce programme est 2400 et la numérotation des processus est séquentielle
donnez le résultat à l'exécution.
normalement il nous donne l'arbre que j'ai présenté mais j'ai pas compris comment affecter les num du PIDs.
Avec ce que je viens de dire, la seule garantie que tu auras avec une attribution séquentielle des PID c'est une relation d'ordre sur ce PID entre les processus pères et fils: les fils auront un PID plus grand que leur pères.
Pour être sûr qu'on puisse obtenir un arbre qui ne changera pas selon les cas, il faut en plus que l'ordonnanceur ait un ordre d'exécution défini, et ce semble ne pas être le cas dans ton exercice. Demande des précisions.
Pour être sûr qu'on puisse obtenir un arbre qui ne changera pas selon les cas, il faut en plus que l'ordonnanceur ait un ordre d'exécution défini, et ce semble ne pas être le cas dans ton exercice. Demande des précisions.
En fait, c'est un exercice
On suppose que le pid du processus correspond a ce programme est 2400 et la numérotation des processus est séquentielle
Donnez le résultat à l'exécution.
Normalement il nous donne l'arbre que j'ai présenté mais je n'ai pas compris comment affecter les PIDs.