2009-05-29 8 views
2

Zwei C ausführbare Dateien A und B sind vorhanden. A und B kommunizieren über einen Socket miteinander.Erstellen Sie einen neuen unabhängigen Prozess von einem anderen C-Prozess

B

  1. Wenn B erste und A gestartet unabhängig oder durch A. gestartet werden nächste gestartet wird, dann A und B richtig ohne Probleme starten. Auch wenn A neu gestartet wird, gibt es keine Probleme.

  2. Wenn B über A gestartet wird, startet A und B ordnungsgemäß. Aber hier ist der Kommunikationsport sowohl an A als auch an B gebunden. Wenn A neu gestartet wird, startet A nicht.

Da B durch A gestartet wird, Verfahren A ist die Mutter des Prozesses B.

So ist es irgendwelche Mittel, mit dem der Prozess B gestartet werden kann, unabhängig von einem Prozess?

Wir haben versucht, mit Gabel, aber mit Gabel, wenn wir versuchen, die exe zu starten, wird zwei Prozess statt einer gestartet.

Antwort

3

Haben Sie versucht, eine 'Wrapper' ausführbare Datei zu verwenden, die sich zweimal ausschaltet - einmal für A und einmal für B - und sich dann selbst tötet? Dadurch würden A und B als separate Prozesse aktiv sein, die dann vom Init-Prozess geerbt werden und sicher neu gestartet werden können.

0

Sind Sie sicher, dass Sie den Rückgabewert von fork() richtig überprüfen?

Like:

pid_t pid; 
if (pid == 0) { 
    /* child */ 
} 
else if (pid > 0) { 
    /* parent */ 
} 
else { 
    /* error */ 
} 
0

Sie ein Domain-Socket oder eine regelmäßige Netzwerk-Socket Unix verwenden?

Welcher der Prozesse, A oder B, überwacht den Socket (passiv offen), und was macht den aktiven Open?

Wenn Sie entscheiden, dass A B ausführen soll, wie bestimmt der Code, dass dies erforderlich ist?

Öffnen Sie die Steckdose, bevor Sie fork und exec?

Mein Eindruck von der Information gegeben ist:

  • Sie verwenden eine Netzwerkbuchse
  • B den Hörer

Aber ich leicht verwechselt werden könnte, ist.

Ich frage mich, ob Sie Probleme auftreten, weil A den aktiven Socket bereits erstellt hat, bevor Sie fork und exec B, also das aktive Ende des Sockets nicht sauber geschlossen wird, wenn A beendet, weil B eine Kopie des Sockets für geöffnet hat Schreiben sowie A. Wenn Sie forkieren, sollte der untergeordnete Prozess nicht benötigte Dateideskriptoren (wie Sockets) bereinigen, bevor ein anderer Prozess ausgeführt wird.