---
title: "fork() wait for all"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/56170-fork-wait-for-all"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "fnolis"
published: "2002-10-16T12:34:48.000Z"
updated: "2002-10-17T07:40:42.000Z"
replies: 4
views: 297
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/56170-fork-wait-for-all"
---

# fork() wait for all

## #1 — fnolis, 2002-10-16T12:34Z

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?

Permalänk: https://www.webforum.nu/p/56170

## #2 — zmodem, 2002-10-16T13:20Z

är det jag som är kass eller vadå vänta på \_alla\_ childs? vadå fork()

fatta inte...

Permalänk: https://www.webforum.nu/p/822231

## #3 — developer, 2002-10-16T13:38Z

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().

Permalänk: https://www.webforum.nu/p/822250

## #4 — zmodem, 2002-10-16T17:40Z

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?

Permalänk: https://www.webforum.nu/p/822520

## #5 — fnolis, 2002-10-17T07:40Z

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;
}
```

Permalänk: https://www.webforum.nu/p/825780

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/56170-fork-wait-for-all
