Witam,
Napotkalem na problem jak w temacie. Dla testu utworzylem funkcje ktora tworzy fork, dziecko wyswietla na ekranie tekst i konczy, rodzic czeka na dziecko i wyswietla komunikat.
Wywoluje ta funkcje w roznych miejscach mojego programu i mam dwa rozne rezultaty. Nie dziala mi to w niektorych miejscach. Wyglada to tak jakby fork sie utworzyl, ale dziecko nie. Zauwazylem ze nie dziala mi to kiedy wywoluje ta funkcje z innego niz glowny watku, albo z GTK event.
Funkcja wyglada tak:
void test()
{
int nStatus;
pid_t hProcess;
hProcess = fork();
if( hProcess == -1 ) {
printf( "Unable to fork process\n" );
return;
}
if( hProcess == 0 ) {
printf( "Executing child\n" );
exit(2);
}
printf( "Fork worked\n" );
if( waitpid( hProcess, &nStatus, 0 ) == -1 ) {
printf( "Wait failed\n");
return;
}
if( WIFEXITED( nStatus ) )
printf( "Program exited normally with %d\n",WEXITSTATUS(nStatus));
else
printf( "Program failed %d\n", WEXITSTATUS(nStatus) );
}
a rezultaty:
- kiedy wszystko dziala:
Executing child
Fork worked
Program exited normally with 2
- kiedy dzieje sie cos dziwnego:
Fork worked
Program failed 0
Czy ktos potrafi wytlumaczyc dlaczego tak sie dzieje? Co moze byc przyczyna? Dlaczego fork sie tworzy a dziecko nie?
Pozdrawiam,
LUK