[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