007
01.10.2004, 17:17 Uhr
mike
Pinguinhüpfer (Operator)
|
Zitat von virtual: |
1. Ich hoffe, dir ist klar, daß das "*** main ***" wirklich nur einmal kommen darf: fork startet das Programm ja nicht neu, sondern macht einfach nur aus einem Prozess einen neuen, weiteren, der eben nach dem fork genauso weiterläuft, wie der andere
|
Hmm. Komisch. Ich hab folgendes und "**main**" kommt 2 Mal:
C++: |
#include <stdio.h> #include <sys/types.h>
int main(void) { int var = 0, status; pid_t pid; fflush(stdout); setvbuf(stdout, NULL, _IOFBF, BUFSIZ); printf("***** main *****\n");
switch(pid = fork()) { /* OR fork */ case -1: fprintf(stderr, "FATAL"); break; case 0: var++; printf("** Child **\n"); //_exit(0); ||MLC|| break; default: printf("** Parent **\n"); break; } wait(&status); printf("** PID=%d val=%d addr=%p (%s)**\n",pid,var,&var,(pid==0)?"Child":"Parent");
return 0; }
|
Code: |
Michael-Vodeps-Computer:~/Desktop michaelvodep$ gcc -o test test.c Michael-Vodeps-Computer:~/Desktop michaelvodep$ ./test ***** main ***** ** Child ** ** PID=0 val=1 addr=0xbffffd70 (Child)** ***** main ***** ** Parent ** ** PID=615 val=0 addr=0xbffffd70 (Parent)** Michael-Vodeps-Computer:~/Desktop michaelvodep$
|
Zitat von virtual: |
2. Die Zeile mit dem "** PID ... " kommt ohne das exit in beiden fällen zweimal, jedenfalls bei mir. Würde ich auch so erwarten.
|
Wenn ich vfork nehme, ohne _exit, kommt es trotzdem nicht Bei fork (siehe oben) kommts 2 Mal Das liegt wahrscheinlich an BSD. Mal schaun warum das so ist
mfg --
|