[Allegro] acon exit-code 11 - die Aufloesung
Anando Eger
a.eger at aneg-dv.de
Di Okt 14 21:26:17 CEST 2014
Hallo Herr Eversberg,
der betreffende log-Abschnitt sah so aus:
--------------------------------------------------------------
--- begin ---
AVANTI:EOR
--- end --- <at avanti.c, line 417>
[2014-10-13 14:54:01] (IO) <conn 2> stdout -> socket (12 bytes)
<at avanti.c, line 630>
[2014-10-13 14:54:01] (SLAVE) <conn 2> <at avanti.c, line 737>
[2014-10-13 14:54:01] (SLAVE) <conn 2> child exited with status 11
<at avanti.c, line 737>
[2014-10-13 14:54:01] (SLAVE) <conn 2> JOB DONE <at avanti.c, line
737>
[2014-10-13 14:54:01] (IO) <conn 2> closed stdout <at avanti.c,
line 642>
[2014-10-13 14:54:01] (NOTE) end job <at avanti.c, line 654>
[2014-10-13 14:54:01] (SLAVE) <conn 2> slave finished (status 11)
<at avanti.c, line 737>
[2014-10-13 14:54:01] (IO) <conn 2> closed stderr <at avanti.c,
line 684>
--------------------------------------------------------------
die Meldung "slave finished ..." finde ich nur in der slave.c von
avanti.
Dort wird in Zele 382 eine Variable 'err' ausgegeben:
fprintf(stderr,"slave finished (status %d)\n", err);
'child exited with status' ist in der gleichen Datei in Zeile 354 zu
finden.
in slave(...) gibt es nur 4 Zuweisungen zu err:
Z 123: err = 0
Z 278: err = 1
(Z 277: 'fprintf(stderr, "broken pipe\n", err);' ist unklar, es
fehlt der Platzhalter für err)
und
Z 350: err = pclose(mypipe);
"Die Funktion pclose() wartet bis der zugehörige Prozess beendet ist
und gibt den Exit-Status des Befehls, wie von wait4(2) geliefert,
zurück."
Da der Wert in meinem Fall immer 11 war, kann es die Prozess-ID
nicht sein. Weitere mögliche Werte wären nur noch 0 und -1.
Woher kommt dann der Wert 11?
acon verursachte in meinem Fall einen 'segmentation fault', wenn man
es mit
./acon<test.job
und test.job:
-------------------
& ./
help
@ DB=avdemo ID=opac/OPAC
-------------------------
aufruft.
Nach ca 4 Sdt. Suche hatte ich die Ursache gefunden:
Ich hatte die avanti.con schön mit Änderungsdatum und Zweck
kommentiert - etwa so:
-----------------------------------------------------------
#
# 14.10.2014 für blablabla
#
[general]
...
-----------------------------------------------------------
In der avanti.conf darf vor [general] nichts stehen! Auch kein
Kommentar. Darf man da fluchen?
Die verantwortlichen Routinen rund um inifile in inifile.cpp
sind so nett geschrieben, dass mir das reverse engineering heute
nicht mehr zumute.
Gute Nacht.
Viele Grüße
Anando Eger
Am 13.10.2014 16:04, schrieb Anando Eger:
>
> vermute ich richtig, dass die avanti-Log-Meldung
>
> ... slave finished (status 11) ...
>
> den return-Code von acon wiedergibt?
>
Nein. Da wird der letzte Wert der "internen Nummer" geliefert.
Das ist, zugegeben, bislang undokumentiert. Im Quellcode ist der
betr. exit-Befehl in avanti.cpp des acon-Pakets (!), Zeile 711:
exit(avantijob->DoJob()); // Job ausf. und Rueckgabe als exit-Wert
==
ERRORLEVEL
Der return-Befehl von DoJob() ist in Zeile 5704 von avjob.cpp:
return((int)iN); // Erfolg
> Welche Exit-Codes liefert acon?
Das können Sie somit selber bestimmen, indem Sie im Job eine
Zuweisung
z=...
direkt vor dem Ende machen, oder z.B. bei jedem "end"-Befehl einen
anderen.
Die Bezeichnung ERRORLEVEL ist evtl. irreführend, es wird sich
vielmehr
meistens um eine Erfolgsmeldung handeln.
B.E.
_______________________________________________
Allegro mailing list
Allegro at biblio.tu-bs.de
http://sunny5.biblio.etc.tu-bs.de/mailman/listinfo/allegro
Mehr Informationen über die Mailingliste Allegro