• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

c-Prog fork u. system-Aufr. immer -1

Riki

Newbie
Hallo,

ich habe in einem C-Programm ein fork verwendet und muss in diesem Kindprocess einen system-Aufruf machen. Dieser gibt mir immer -1 zurück, auch wenn der system-Aufruf erfolgreich war. In den Manpages steht ja auch sowas von wegen SIGCHLD wird blockiert, keine Ahnung, ob das bedeutet das in jedem Fall -1 zurückkommt. Wie kann ich das Problem umgehen und eine vernüftige Fehlerabfrage nach diesem system-Aufruf machen ? Oder kann ich etwas anderes als den system-Aufruf machen ?

Vielen Dank für Hilfe im voraus
Riki
 
OP
R

Riki

Newbie
Ich vergaß zu erwähnen, dass mein System-Aufruf (in dem child-Process) bei SuSE 8.1 immer 0 während SuSE 9.3 immer -1 zurückbringt. In dem Systemaufruf mache ich einen mount-Befehl (hab aber auch anderes ausprobiert) und der klappt immer. Das Programm läuft richtig und zu Ende, bringt nur wie gesagt -1 bei Suse 9.3 zurück, was ich dann erstmal ignorieren muss, damit das Programm läuft.

Hier ein kurzer Ausschnitt:

strcpy(pfad_status,pfad);
srrcat(pfad_status,"/data");
int_status=stat(pfad_status,&file_status);
if (int_status == -1) {
sprintf(sysBefehl,"mount %s:/home %s\0",fremdHost,pfad);
systemret=system(sysBefehl);
if (systemret <0) { //kann ich so bei Suse9.3 nicht machen, weil
// immer -1, obwohl alles richtig gemacht wird
cout<<"Kann mount nicht ausführen."<<endl;
}
}



Irgendeine Idee dazu würde mir echt weiterhelfen. Danke.
 
Tips?
"pfad" kein gültiger String.
"pfad_status" zu klein.
"file_status" kein gültiges struct stat.
"sysBefehl" zu klein
"fremdHost" kein gültiger String.

Wie du siehst, ein Paste des ganzen Code (-> http://pastebin.ca/ ) ist hilfreicher.
 
OP
R

Riki

Newbie
Erstmal vielen Dank, dass ich überhaupt Antwort bekomme.

Mein eigentliches Problem ist nicht erkannt worden !!

Da ich über viel Programmiererfahrung verfüge, kann ich sicher (!) ausschließen, dass die paar Variabelchen schon stimmen, denn (!) das Programm läuft ja richtig, auch mit den Variablen. Das Problem ist ganz klar ein SuSE 8.1 zu SuSE 9.3 Ding. Ich bekomme von einem system-Aufruf in einem CHILD-PROCESS (!) bei 9.3 immer -1 (auch wenn alles korrekt gelaufen ist) und bei 8.1 immer die korrekte 0 zurück. Mein Programm ist sehr sehr umfangreich und läuft auf 176 PC mit Suse 8.1 gleichzeitig (Mathematische Berechnungen). Mit der Zeit hat es ein paar PCs hingerafft, so dass diese mit einem neuen MB leider Suse 9.3 erhalten haben.
Am liebsten wäre mir, man könnte mir jetzt so was sagen wie, "klar, schalte mal in den sysconfig-Dateien dies und das Flag an/aus, dann geht es wieder". Oder nimm statt des system-Aufrufs den höngelwöng-Aufruf.
Tja, so einfach ist es wohl nicht. Ein Programm das "forked" und in dem Child dann einen system-Aufruf macht. Ich müsste wohl das Problem isolieren und in fuziklein programmieren, damit das dann jemand nachvollziehen kann.

Danke , Riki
 
Ich müsste wohl das Problem isolieren und in fuziklein programmieren, damit das dann jemand nachvollziehen kann.
Ganz genau. Du reißt in einer Sourcecodekopie alles nach system() raus. Dann reduzierst du stückweise den Code davor solange wie system() immer noch -1 zurückgibt.
 
Ich würde mal das Programm mit "strace -s 500 -f ..." aufrufen. Das geht ohne Sourcecodeänderungen.
Vielleicht ergibt das etwas neues. Z.B. das das Programm unter 8.1 gegen Libraries
gelinkt wurde die unter 9.3 nicht da sind oder anderes.

Haveaniceday
 
Oben