Forum: Compiler & IDEs pid=fork() wird nicht 0


von Butterberger (Gast)


Lesenswert?

Hallo,

auf meinem ARM laeuft ein minimales Linux.

Das Programm, das ich debugge, macht einen fork(); jedoch ist die PID 
des Kindprozesses nicht 0.
1
pid_t pid = fork()
1
(gdb) 
2
1183-var-create - * pid
3
1183^done,name="var4",numchild="0",value="759",type="pid_t",thread-id="1",has_more="0"
4
(gdb) 
5
1184-var-evaluate-expression var4
6
1184^done,value="759"
7
(gdb)

Also, auch der eclipse debugger zeigt mir fuer PID den Wert 759 an.
Das ist aber nicht der Mutterprozess. Denn egal, ob ich vor oder nach 
fork() den folgenden Befehl benutze, die Ausgabe bleibt gleich.
1
(gdb) 
2
info inferior
3
1185-interpreter-exec console "info inferior"
4
~"  Num  Description       Executable        \n"
5
  Num  Description       Executable        
6
~"* 1    process 758       c:\\users\\ich\\documents\\zynqlinux\\workspace\\v\\debug\\myApp.elf \n"
7
* 1    process 758       c:\users\ich\documents\zynqlinux\workspace\v\debug\myApp.elf 
8
1185^done
9
(gdb)

Gibt es jetzt nur einen Prozess? Oder wieso zeigt gdb mir nur den einen 
an?
Und warum wird PID nicht 0? Ist das ARM oder Linux spezifisch?

DANKE

von Dr. Sommer (Gast)


Lesenswert?

Wie wärs mal mit Code zeigen? Und warum denkst du dass der Debugger 
magisch in den Kind-Prozess springen soll, wo fork() 0 zurückgibt? Ich 
würde mal sagen der Debugger läuft brav im Parent-Prozess weiter, wo 
eben eine PID zurückkommt.

von Bitflüsterer (Gast)


Lesenswert?

RETURN VALUE

    Upon successful completion, fork() shall return 0 to the child 
process and shall return the process ID of the child process to the 
parent process. Both processes shall continue to execute from the fork() 
function. Otherwise, -1 shall be returned to the parent process, no 
child process shall be created, and errno shall be set to indicate the 
error.

Magst Du Deine Frage nochmal neu formulieren?

von Kaj (Gast)


Lesenswert?

Butterberger schrieb:
> jedoch ist die PID
> des Kindprozesses nicht 0.
Warum sollte die ProzessID des Kind-Prozesses 0 sein?

Butterberger schrieb:
> Und warum wird PID nicht 0?
Warum sollte sie 0 werden?

Butterberger schrieb:
> auch der eclipse debugger zeigt mir fuer PID den Wert 759 an.
> Das ist aber nicht der Mutterprozess
Was willst du denn nun? Die PID vom Eltern-Prozess oder vom 
Kind-Prozess?

von Butterberger (Gast)


Lesenswert?

Na gut, Denkfehler erkannt. PID ist positiv und nicht Null, also bin ich 
in Mutterprozess und es sollte ein Kind erzeugt worden sein.

Dennoch, ich versuche mit (gdb) in den Kindprozess zu gelangen, es will 
mir aber nicht gelingen.
1
(gdb) set follow-fork-mode child
habe ich gesetzt.
Auch anschliessendes
1
(gdb) set detach-on-fork on/off
habe ich versucht.
1
info inferiors
liefert aber immer nur den einen Prozess.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.