1

Voilà, j'ai regardé le man de la fonction wait, mais il m'a pas donné satisfaction (mauvaise comprehension?)
voilà, lorsque je cree un processus à l'aide de fork, je peux attendre la fin du processus fils grace à la fonction wait(int* ).
Mais la question est: si je cree plusieur processus, wait attend la fin de quel processus? tous / le premier?
voilà mercismile

2

N'importe lequel ^^ (il attend le signal SIGCHLD, en fait)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

Ok mercitongue
Donc apparement, si je veux attendre que tous les process soit fini, il faut faire un for(i=0;i<nbr process crées;i++) whait(&status)
En revanche si je veux savoir quel processus est fini je suis obligé de renvoyé sont PID par wexit, ce qui m'empeche de renvoyer un code d'erreur :/

heu sinon si j'ai bien compris, fork dupplique tous les segments d'un programme, que ce soit data / code...?

thx!

4

bon comment etre sur que tous les autres processus enfants soit finis?
exemple simple:
void compillation(char **pSources)
{
	int child;
	while(*++pSources)
	{
		child = fork();
		if (!child)
		{
			printf("gcc -c %s\n", *pSources);
			execlp("gcc", "gcc", "-c", *pSources, NULL);
		}
	}
}

si je veux balancer le linkage, il faut que je sois sur que la compilation soit finie. Or si je veux faire de la compilation en parallele:
je pourais bien faire un for sur des waits, mais si je dits d'attendre X processus, et qu'avant il y en a un qui etait deja fini, je risque d'en attendre un pendant longtemps;p

5

JackosKing VNR
: En revanche si je veux savoir quel processus est fini je suis obligé de renvoyé sont PID par wexit, ce qui m'empeche de renvoyer un code d'erreur :/

Non, wait te renvoie le PID.
heu sinon si j'ai bien compris, fork dupplique tous les segments d'un programme, que ce soit data / code...?

Dans une implémentation efficace, il les duplique virtuellement seulement, la vraie duplication est effectuée lors de la première écriture seulement (copy-on-write).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

JackosKing VNR :
si je veux balancer le linkage, il faut que je sois sur que la compilation soit finie. Or si je veux faire de la compilation en parallele:
je pourais bien faire un for sur des waits, mais si je dits d'attendre X processus, et qu'avant il y en a un qui etait deja fini, je risque d'en attendre un pendant longtemps;p

Ben oui, les signaux sous Unix c n'importe quoi et c'est rempli de race conditions...

Hmm sinon les fonctions de sémaphores (sem*) devraient faire ce que tu veux, mais c possible qu'il y ait des solutions plus simples...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

bon apparement, il suffit de faire un while(wait()>=0);

8

hum wait(&status) renvoit une erreur 256 si gcc compile pas tongue interessanttongue