www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - fork() zusammen mit exit()?
fork() zusammen mit exit()? < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

fork() zusammen mit exit()?: Linux Systemaufrufe
Status: (Frage) beantwortet Status 
Datum: 19:30 Di 08.11.2011
Autor: bandchef

Aufgabe
Was macht hier exit()?

Hey Leute!

Ich hab folgenden C-Code:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
    int pid, i, j;

    pid = fork();


    if(pid == 0)
    {
        for(i=0; i<10; i++)
        {
            printf("Kindprozess: %d (PID: %d) [mm] \n", [/mm] i, getpid());    //getpid() -> liefert die PID des aufrufenden Prozesses zurück
            sleep(1);   //sleep() -> stoppt den aufrufenden Prozess so lange, wie es in der Klammer (Sekunden) steht
        }

        exit(1);    //exit() ->
    }
    else if(pid > 0)
    {
        for(j=0; j<10; j++)
        {
            printf("Vaterprozess: %d (PID: %d) [mm] \n", [/mm] j, getpid());
            sleep(1);
        }
    }
    else
    {
        printf("Fehler!");
        exit(1);    //exit() ->
    }

return 0;
}



Wenn ich nun das Programm aufrufe sieht man wie das OS die zwei Prozesse abarbeitet. Was mir nicht klar ist, was das exit() machen soll. Wenn ich mir zu exit() die Linux-manpage anschaue, dann wird nur ein Fall erklät für exit(3). Für die beiden Fälle die ich hier hab nämlich exit(0) und exit(1) hab ich leider nichts gefunden. Wenn ich die Zahlen in den Klammern ändere, verändert sich bei der Ausgabe auch nichts. Irgendwie versteh ich das nicht so ganz. Könnt ihr mir dazu helfen?







        
Bezug
fork() zusammen mit exit()?: Antwort
Status: (Antwort) fertig Status 
Datum: 20:00 Di 08.11.2011
Autor: MathePower

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Hallo bandchef,

> Was macht hier exit()?
>  Hey Leute!
>  
> Ich hab folgenden C-Code:
>  
> #include<stdio.h>
>  #include<unistd.h>
>  #include<stdlib.h>
>  
> int main()
>  {
>      int pid, i, j;
>  
> pid = fork();
>  
>
> if(pid == 0)
>      {
>          for(i=0; i<10; i++)
>          {
>              printf("Kindprozess: %d (PID: %d) [mm]\n",[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

i,

> getpid());    //getpid() -> liefert die PID des aufrufenden
> Prozesses zurück
>              sleep(1);   //sleep() -> stoppt den

> aufrufenden Prozess so lange, wie es in der Klammer
> (Sekunden) steht
>          }
>  
> exit(1);    //exit() ->
>      }
>      else if(pid > 0)

>      {
>          for(j=0; j<10; j++)
>          {
>              printf("Vaterprozess: %d (PID: %d) [mm]\n",[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

j,

> getpid());
>              sleep(1);
>          }
>      }
>      else
>      {
>          printf("Fehler!");
>          exit(1);    //exit() ->
>      }
>  
> return 0;
>  }
>  
>
>
> Wenn ich nun das Programm aufrufe sieht man wie das OS die
> zwei Prozesse abarbeitet. Was mir nicht klar ist, was das
> exit() machen soll. Wenn ich mir zu exit() die
> Linux-manpage anschaue, dann wird nur ein Fall erklät für
> exit(3). Für die beiden Fälle die ich hier hab nämlich
> exit(0) und exit(1) hab ich leider nichts gefunden. Wenn
> ich die Zahlen in den Klammern ändere, verändert sich bei
> der Ausgabe auch nichts. Irgendwie versteh ich das nicht so
> ganz. Könnt ihr mir dazu helfen?
>  


Der Befehl "exit()" gibt einen Rückkehrcode an die aufrufende Umgebung zurück.

Ein Rückkehrcode von 0 bedeutet das Progamm wurde ohne Fehler beendet.
Ein von 0 verschiedener Wert bedeutet, das Programm wurde mit einem Fehler beendet.


Gruss
MathePower

Bezug
                
Bezug
fork() zusammen mit exit()?: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:24 Di 08.11.2011
Autor: bandchef

Danke für die Antwort!

Zitat: "Ein Rückkehrcode von 0 bedeutet das Progamm wurde ohne Fehler beendet.
Ein von 0 verschiedener Wert bedeutet, das Programm wurde mit einem Fehler beendet."

Wenn ich jetzt z.B schreiben würde "var = exit();" und das Programm fehlerfrei beendet wurde, dann schreibt mir exit() eine 0 in var. Wenn das Programm nicht korrekt beendet wurde, dann schreibt mir exit() einen von 0 verschiedenen Wert in var. Soweit ist alles klar.

Aber: Was bedeutet die Zahl innerhalb der Klammer des Systemaufrufs "exit()"?


-> Könnte man sagen, exit() ist ähnlich dem return (welches ja aus Funktionen bestimmte Werte zurückliefern kann...), nur, dass sich das exit() auf die aufrufende Umgebung zurückbbezieht und aus dem aufgerufenen Prozess einen entsprechenden Wert zurückliefert?

Bezug
                        
Bezug
fork() zusammen mit exit()?: Antwort
Status: (Antwort) fertig Status 
Datum: 20:37 Di 08.11.2011
Autor: MathePower

Hallo bandchef,

> Danke für die Antwort!
>  
> Zitat: "Ein Rückkehrcode von 0 bedeutet das Progamm wurde
> ohne Fehler beendet.
>  Ein von 0 verschiedener Wert bedeutet, das Programm wurde
> mit einem Fehler beendet."
>  
> Wenn ich jetzt z.B schreiben würde "var = exit();" und das
> Programm fehlerfrei beendet wurde, dann schreibt mir exit()
> eine 0 in var. Wenn das Programm nicht korrekt beendet


Dann erhältst Du möglicherweise eine Fehlermeldung Compiler,
da exit() den Rückgabetype void hat und somit nichts zurückliefert.


> wurde, dann schreibt mir exit() einen von 0 verschiedenen
> Wert in var. Soweit ist alles klar.
>  
> Aber: Was bedeutet die Zahl innerhalb der Klammer des
> Systemaufrufs "exit()"?
>  


Das habe ich schon erläutert.


>
> -> Könnte man sagen, exit() ist ähnlich dem return
> (welches ja aus Funktionen bestimmte Werte zurückliefern
> kann...), nur, dass sich das exit() auf die aufrufende
> Umgebung zurückbbezieht und aus dem aufgerufenen Prozess
> einen entsprechenden Wert zurückliefert?


"exit" beendet das gesamte Programm.


Gruss
MathePower

Bezug
                                
Bezug
fork() zusammen mit exit()?: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 21:05 Di 08.11.2011
Autor: bandchef

Gut, wenn ich nun exit(0) stehen hab, dann verstehe ich nicht wie ich quasi bei der Programmierung schon wissen soll ob ein Fehler da ist oder nicht?

Ich hab gedacht, dass exit() einen Wert zurückliefert...; so müsste ich mir quasi vorher schon aussuchen ob das Programm richtig ist oder nich... Versteh ich nicht.

Kannst du das nochmal ausführlicher und für gaaanz Dumme erklären?

Bezug
                                        
Bezug
fork() zusammen mit exit()?: Antwort
Status: (Antwort) fertig Status 
Datum: 21:15 Di 08.11.2011
Autor: MathePower

Hallo bandchef,


> Gut, wenn ich nun exit(0) stehen hab, dann verstehe ich
> nicht wie ich quasi bei der Programmierung schon wissen
> soll ob ein Fehler da ist oder nicht?
>  


Ob das Programm bei Abbruch einen Fehler liefert oder nicht,
liegt in Deinem Ermessen, d.h. das wird von Dir gesteuert.


> Ich hab gedacht, dass exit() einen Wert zurückliefert...;
> so müsste ich mir quasi vorher schon aussuchen ob das
> Programm richtig ist oder nich... Versteh ich nicht.
>  
> Kannst du das nochmal ausführlicher und für gaaanz Dumme
> erklären?


"exit" liefert keinen Wert zurück, da der Rückgabetyp "void"
das nicht zulässt.

Dem Befehl "exit()" kannst Du einen Wert mitgeben,
der  dann von der aufrufenden Umgebung (in Linux i.d.R. die Shell)
abgefragt werden kann.


Gruss
MathePower

Bezug
                                                
Bezug
fork() zusammen mit exit()?: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 21:20 Di 08.11.2011
Autor: bandchef

Aber was für einen Sinn macht das, dass ich der Funktion exit() in die Klammer reinschreiben muss ob das Programm richtig ausgeführt wurde oder nicht. Man kann doch vor Programmausführung noch gar nicht wissen, ob dann zur Laufzeit alles im Programm passt!

Beispiel: Das Programm wurde richtig ausgeführt, ich schreib aber z.B. exit(1), dann wäre quasi das Programm falsch ausgeführt worden, obwohl es doch richtig ist!

Versteh ich einfach nicht...

Bezug
                                                        
Bezug
fork() zusammen mit exit()?: Antwort
Status: (Antwort) fertig Status 
Datum: 21:31 Di 08.11.2011
Autor: MathePower

Hallo bandchef,

> Aber was für einen Sinn macht das, dass ich der Funktion
> exit() in die Klammer reinschreiben muss ob das Programm
> richtig ausgeführt wurde oder nicht. Man kann doch vor
> Programmausführung noch gar nicht wissen, ob dann zur
> Laufzeit alles im Programm passt!
>  


Das hat damit nichts zu tun.

Wenn Du ein Programm schreibst, das  z.B. eine bestimmte Anzahl
von Argumenten erwartet. und das Programm wird mit einer falschen
Anzahl von Parametern aufgerufen, dann solltest Du diesen Fall
in dem Programm berücksichtigen und dann einen entsprechenden
Fehlercode liefern. Im Hauptprogramm main hat exit dieselbe Wirkung
wie return.


> Beispiel: Das Programm wurde richtig ausgeführt, ich
> schreib aber z.B. exit(1), dann wäre quasi das Programm
> falsch ausgeführt worden, obwohl es doch richtig ist!
>  
> Versteh ich einfach nicht...


Gruss
MathePower

Bezug
        
Bezug
fork() zusammen mit exit()?: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:10 Di 08.11.2011
Autor: felixf

Moin!

> Wenn ich nun das Programm aufrufe sieht man wie das OS die
> zwei Prozesse abarbeitet. Was mir nicht klar ist, was das
> exit() machen soll. Wenn ich mir zu exit() die
> Linux-manpage anschaue, dann wird nur ein Fall erklät für
> exit(3). Für die beiden Fälle die ich hier hab nämlich
> exit(0) und exit(1) hab ich leider nichts gefunden. Wenn

Beachte bitte, dass das "EXIT(3)" ganz oben bei "man exit" sagt, dass du in Kapitel 3 des Handbuchs im Abschnitt "EXIT" bist. Das hat nichts mit dem Befehl "exit(3)" zu tun, wo der Funktion "exit" der Parameter 3 uebergeben wird.

LG Felix


Bezug
                
Bezug
fork() zusammen mit exit()?: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 21:18 Di 08.11.2011
Autor: bandchef

Ok; das erklärt einiges :-)

Aber, was darf ich denn dann überhaupt in die Klammern schreiben? Das heißt also, exit() liefert einen vom Programmstatus abhängig Parameter zurück, der verschieden von 0 wird, wenn das Programm falsch lief und der 0 wird wenn das Programm richtig beendet wurde.

Soweit korrekt?

Bezug
                        
Bezug
fork() zusammen mit exit()?: Antwort
Status: (Antwort) fertig Status 
Datum: 21:33 Di 08.11.2011
Autor: MathePower

Hallo bandchef,


> Ok; das erklärt einiges :-)
>  
> Aber, was darf ich denn dann überhaupt in die Klammern
> schreiben? Das heißt also, exit() liefert einen vom
> Programmstatus abhängig Parameter zurück, der verschieden
> von 0 wird, wenn das Programm falsch lief und der 0 wird
> wenn das Programm richtig beendet wurde.
>  
> Soweit korrekt?


Ja.


Gruss
MathePower

Bezug
                        
Bezug
fork() zusammen mit exit()?: Antwort
Status: (Antwort) fertig Status 
Datum: 10:52 Mi 09.11.2011
Autor: Event_Horizon

Hallo!

Du kannst dir ne Tabelle ausdenken, welche zahl für welchen Fehlerfall stehen soll.

Das hängt auch davon ab, ob der genaue Grund für ein aufrufendes Programm überhaupt interessant ist, oder nicht. Meistens reicht ja die Info, ob alles OK war, oder nicht.

Als Konvention gibt man dann standardmäßig -1 zurück. Das besteht binär nur aus Einsen.


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de