2009-05-29 12 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.

Verwandte Themen