2012-04-02 15 views
3

Ich versuche zur Zeit eine übergeordnete Prozess zu kommunizieren, die für jede Anforderung und wollen wissen, wie behalte ich den Überblick über die Anzahl der Kinder und prüfen, ob alle Kinder mehrere Kinder Prozess haben sollten beendet haben?Kommunikation zwischen Eltern-Prozess und mehrere Kinder

I haben versucht Rohre unter Verwendung der read() Funktion kommunizieren über eine Nachricht der Beendigung zurück zu senden. Dies ist jedoch irgendwie blockiert alle Gleichzeitigkeit und wartet auf ein Kind zu vervollständigen und die Beendigungsnachricht zurücksenden, bevor die nächsten Prozessanforderungen Handhabung.

Gibt es eine Möglichkeit, dies zu lösen? Oder muss ich Methoden wie Shared Memory, Sockets, etc ... verwenden?

I C Sprache verwenden, und ich brauche nur einen Weg, Tracking, wie viele Kinder ich habe. Ich kann einen Zähler im Elternprozess erhöhen, aber wenn ein Kind stirbt? Wie bekomme ich diese Nachricht zurück und benutze sie, um den Zähler im Elternteil zu dekrementieren?

+0

Welche Sprache und/oder Framework verwenden Sie? –

+0

Wie viel Information muss kommuniziert werden? Ist die Kommunikation in beide Richtungen? – wallyk

Antwort

2

Auf POSIX-kompatiblen Plattformen, wenn Sie nur wissen möchten, wann der Kindprozess beendet wird und nichts anderes, dann können Sie SIGCHLD Signal verwenden.
SIGCHLD ist das Signal an einen Prozess gesendet, wenn ein Kind Prozess beendet wird, Sie es Ihre eigenen Signal-Handler verarbeiten kann durch das Schreiben. Ihr Rückgabewert ist die Prozess-ID des untergeordneten Prozesses, der beendet wird.

Wenn Sie zwischen Eltern und Kind Prozesse in regelmäßigen Abständen im Verlauf der Programmausführung kommunizieren müssen, dann werden Sie irgendeine Art von Inter Process Mechanism(IPC) verwenden müssen, Auswahl, welche auf mehreren Faktoren wie Leistung abhängt, brauchen Synchronisation, Notwendigkeit der seriellen Kommunikation usw.

Verwandte Themen