fnolisMedlem sedan sep. 200162 inlägg
jag får inte rätt på det...
vad jag vill göra är:
int main( int argc, char *argv[] )
{
for( int i = atoi( argv[1] ); --i; )
{
if( fork() == 0 )
{
sleep( 1 );
return 0;
}
}
/\* och det är här som jag vill vänta på \_alla\_ childs \*/
wait();
return 0;
}
hur gör man för att kunna vänta på alla childs?
zmodemMedlem sedan apr. 200258 inlägg
är det jag som är kass eller vadå vänta på _alla_ childs? vadå fork()
fatta inte...
developerMedlem sedan aug. 2001453 inlägg
Du måste ropa på wait() lika många gånger som fork().
Eftersom fork() returnerar pid på childen som skapas och wait() returnerar värdet på pid som avslutats kan du matcha dessa genom att spara undan värdet av alla fork() och jämföra med dina wait().
zmodemMedlem sedan apr. 200258 inlägg
Jehupp, denna tråden var tydligen out of my league, ska inte lägga mig... stayar out of it
handlar det om win32-programmering eller?
fnolisMedlem sedan sep. 200162 inlägg
developer... thanks!
Jag fixade det nu!
#include <iostream>
#include <unistd.h>
#include <sys/wait.h>
#include <vector>
using namespace std;
int main( int argc, char* argv[] )
{
vector<int> childs;
int child;
for( int i = 5; i; --i )
{
if( ( child = fork() ) == 0 )
{
int sleeping = i + (getpid() % 4);
cout << getpid() << " is about to sleep " << sleeping << "s" << endl;
sleep( sleeping );
cout << getpid() << " is leaving" << endl;
return 0;
}
else
{
childs.push_back( child );
}
}
cout << "wait" << endl;
while( childs.size() )
{
if( waitpid( childs.back(), NULL, WNOHANG ) )
{
cout << "removing: " << childs.back() << endl;
childs.pop_back();
}
}
cout << "exit" << endl;
return 0;
}