Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

C++ fork und exec

10 views
Skip to first unread message

Heinz-Mario Frühbeis

unread,
Apr 2, 2013, 6:26:12 AM4/2/13
to
Hallo zusammen!

Mein Programm baut sich quasi so auf:
Ein System/Start-Programm >
da heraus mehrere andere Programme, die jeweils parallel laufen mᅵssen

Und so frage ich mich derzeit heftigst, ob mittels fork() und (z. Bsp.)
execlp() Prozesse tatsᅵchlich parallel ablaufen?

Mein Problem z. Z. ist, daᅵ mein Programm noch nicht groᅵ genug ist um
das im Programmablauf feststellen zu kᅵnnen.
Also habe ich erst mal zusᅵtzlich ein kleines Programm erstellt.
Und so versuche ich z. Z. mit diversen sleep()-Aufrufen Unterschiede
festzustellen.
Ich meine, daᅵ es tatsᅵchlich parallel ablᅵuft, aber ich mᅵchte mir da
im Vorfeld wirklich sicher sein, ob ich da den richtigen Weg
eingeschlagen habe.

Einige Ausgaben ("Hallo", "Welt" kommt aus dem externen Programm (mit 2
X sleep(2)):
Hallo fork() // Hauptprogramm sleep(2)
DEFULT LZSTAT 1
EXTERNES PROGRAMM
REG BEFORE SLEEP
Hallo
REG AFTER SLEEP
LZSTAT 0
Welt
Prog ENDE 0

Hallo fork() // Hauptprogramm sleep(6)
DEFULT LZSTAT 1
EXTERNES PROGRAMM
REG BEFORE SLEEP
Hallo
Welt
REG AFTER SLEEP
LZSTAT 0
Prog ENDE 0

Laufen also Programme per fork() und exec() wirklich parallel ab?

Mit Gruᅵ
Heinz-Mario Frᅵhbeis

Heinrich Wolf

unread,
Apr 3, 2013, 3:47:35 AM4/3/13
to
fork verzweigt in einen Parent und einen Child Prozess. Diese beiden laufen
parallel.

Heiner

Heinz-Mario Frühbeis

unread,
Apr 5, 2013, 3:19:52 AM4/5/13
to
Es ist halt immer noch "so ungewohnt" mit C++ zu arbeiten.
fork() verzweigt; kein CreateProcess, oder so.
Und dann verläuft das dennoch parallel <staun>...

Ich danke für deine eindeutige Antwort und ich setzte mich dann mal
dran, mehrere forks() verarbeiten zu können.

Mit Dank und
mit Gruß
Heinz-Mario Frühbeis

Stefan Reuther

unread,
Apr 5, 2013, 12:46:54 PM4/5/13
to
Heinz-Mario Frühbeis wrote:
> Am 03.04.2013 09:47, schrieb Heinrich Wolf:
>> fork verzweigt in einen Parent und einen Child Prozess. Diese beiden
>> laufen parallel.
>
> Es ist halt immer noch "so ungewohnt" mit C++ zu arbeiten.
> fork() verzweigt; kein CreateProcess, oder so.

Das näheste Äquivalent zu CreateProcess dürfte posix_spawnp sein.

Unix trennt "Erzeugen eines Prozesses" (fork), "Konfigurieren eines
Prozesses" (setuid, setgid, chdir, open/close) und "Ausführen eines
Programms" (exec). Windows kracht das alles in einen Funktionsaufruf,
der dann achtundrölfizig Parameter hat und in einem Dutzend Varianten
kommt (CreateProcess, CreateProcessAsUser, CreateProcessWithLogon, ...).


Stefan

Heinz-Mario Frühbeis

unread,
Apr 5, 2013, 3:24:30 PM4/5/13
to
Am 05.04.2013 18:46, schrieb Stefan Reuther:
> Heinz-Mario Frᅵhbeis wrote:
>> Am 03.04.2013 09:47, schrieb Heinrich Wolf:
>>> fork verzweigt in einen Parent und einen Child Prozess. Diese beiden
>>> laufen parallel.
>>
>> Es ist halt immer noch "so ungewohnt" mit C++ zu arbeiten.
>> fork() verzweigt; kein CreateProcess, oder so.
>
> Das nᅵheste ᅵquivalent zu CreateProcess dᅵrfte posix_spawnp sein.
>
> Unix trennt "Erzeugen eines Prozesses" (fork), "Konfigurieren eines
> Prozesses" (setuid, setgid, chdir, open/close) und "Ausfᅵhren eines
> Programms" (exec). Windows kracht das alles in einen Funktionsaufruf,
> der dann achtundrᅵlfizig Parameter hat und in einem Dutzend Varianten
> kommt (CreateProcess, CreateProcessAsUser, CreateProcessWithLogon, ...).
>
>
> Stefan
>

Das mit dem "Windows kracht alles zusammen", habe ich mittlerweile erkannt.
Ich, Newbie, bin da, z. Z. noch, immer wieder erstaunt, wie eine
einzelne (VB6-)Funktion (oder, oder) in C++ aussieht.
Und<!>, wenn ich mal z. Bsp. "Mein VB6-Programm hat 10000 Zeilen."
nehme, wie viele Zeilen das in C++ sind...

Ich taste mich also laangsam <zwei a reichen> ran.

Heute habe ich es erreicht, daᅵ per fork() verschiedene Prozesse
ablaufen und zwar das quasi (im Moment noch) ein Prozess "rein
geschoben" wird. Damit kann ich jetzt aus einem Programm, in seinem
Prozess, heraus ein weiteres Programm/Prozess starten.
Jetzt braucht es natᅵrlich noch eine Verwaltung dessen...und ICP
(interprocess communication). Und da lese ich gerade noch hin und her.
Pipes, signals, oder doch boost, oder alles drei, oder noch was anderes?

Was ich brᅵuchte ist eine Klasse, die von einem Programm[P1]
initialisiert wird und die von einem anderen Programm[P2] genutzt werden
kann, wobei dadurch [P2] [P1] "benachrichtigen" kann, und umgekehrt.
Dabei geht es u. a. auch um Eventhandling fᅵr Fenster (per XLib) in den
einzelnen Programmen.
0 new messages