fork() und child-Returnwert

T

TwoFaze

Hallo Leute!
Habe bisher folgenden Code erstellt
Code:
void create_process() {
	
	int pid;

	//fork() für execl aufrufen
	if((pid = fork()) < 0) {
		printf("Fehler beim forken\n");	//Fehler beim forken
	}
	
	if(!pid) {                  //Childprozess
		
		//Befehl ausführen
		execv("php /var/www/src/wrapper/info.php");

	} else {                    //Parentprozess
		
                //Code für Parent
		
        }

}

int main(int argc, char* argv[]) {
	create_process();
	return 0;
}

Jetzt meine Frage! Wie kann ich den Rückgabewert meines Childprozesses abfangen und darauf reagieren? Mir ist nicht so ganz ersichtlich, was ich im Parentteil tun soll!

Ich hoffe die Frage ist klar und hoffe auf Hilfe..
Gruß!
 
Hi.

Du könntest z.B. mit wait auf den Childprozess warten bzw. mit wait_pid:
Code:
#include <sys/types.h>
#include <sys/wait.h>

int ret;

wait (&ret);

if (WIFEXITED (ret)) {
  printf ("exit status: %d\n", WEXITSTATUS (ret));
} else ... /* Fehler */

:rtfm: man 2 wait

Gruß

PS: Der Aufruf für execv ist falsch, du mußt 2 Argumente angeben:
Code:
char* argv[] = { "php", "/var/www/src/wrapper/info.php", NULL };

execv ("/usr/bin/php", argv);

Oder nimm lieber execlp.
 
Zuletzt bearbeitet:
Danke! Klappt alles soweit..
Habs geändert in
Code:
void create_process() {

        int nPid = fork();
        int nProcId = getpid();

/////// fork() für execlp aufrufen ////////////////////////////////////////////////////////////////////////////////////////////////
        if(nPid < 0) {                  //Fehler beim forken

                printf("Fehler beim forken!");

        }

        if(nPid == 0) {                  //Childprozess

                //Befehl ausführen
                execlp("/var/www/src/wrapper/info.php");
                perror("Fehler bei execlp");
                exit(1);

        } else {                        //Parentprozess

                printf("Gestartet\n");
                wait((int *) 0);
                printf("Beendet\n");

        }

}
So funktionierts dann auch..danke,
gruß!
 
Ok, mein Programm funktioniert soweit wie ich es mir vorstelle, der Parentprozess wartet auf sein Child... nur wie kann ich jetzt überprüfen, mit welchem return-Value sich dieser beendet hat? Ist doch wichtig für die Fehlerauswertung, oder? Wäre schön, wenn mir jemand helfen könnte...

gruß..
 
Ok, manchmal ist man einfach blöd und steht auf der Leitung..(bei mir wohl immer um 10:51 Uhr, siehe Posts) :p hat sich natürlich erledigt, oben stehts ja...danke!!
 
Zurück