2016-05-25 14 views
1

Ich entwickle eine Shared-Library L, die von einem anderen Systemdienst verwendet wird S. In meinem Programm muss ich ein kleines Programm P aufrufen, das Oracle shared libraries verwendet.System() immer wieder 127

Das kleine Programm P verpackt und richtig, und die Umgebungsvariablen, wie PATH, LD_LIBRARY_PATH und ORACLE_HOME richtig eingestellt sind installiert. Ich kann P auf der Kommandozeile ohne Probleme laufen.

Aber als Service S meiner Bibliothek rufen L, die das kleine Programm P über system() läuft, es gibt mir einen Return-Code 127. Ich habe gegoogelt, Leute sagt, es ist ein command not found Fehler, wahrscheinlich ein PATH Problem, also habe ich versucht, mit absoluten Pfad wie folgt

int status = system("/usr/bin/myprog --args"); 
if (status < 0) { ... } 
ret = WEXITSTATUS(status); 

ret noch 127 entspricht.

Irgendeine Idee bitte? Vielen Dank.

aktualisieren Es stellt sich heraus, dass der Dienst S über Befehl gestartet wird daemon in seinem init.d Skript habe ich die folgende Zeile gefunden:

daemon /usr/bin/myserv 

wenn ich export ausdrücklich alle meine Umgebungsvariablen (PATH , ORACLE_HOME und LD_LIBRARY_PATH), es funktioniert. Ich weiß nicht, ob daemon meine Umgebungsvariablen beseitigt.

+0

Sie sollten prüfen, ob 'status'' -1' ist, bevor 'WEXITSTATUS' aufgerufen wird. Wenn es "-1" ist, bedeutet dies, dass "System" fehlgeschlagen ist und "WEXITSTATUS" nicht gültig ist. Wenn es nicht "-1" ist, dann wird der 'WEXITSTATUS' -Wert von Ihrem Programm zurückgegeben und wir können Ihnen nicht sagen, was es bedeutet, da wir nicht den Quellcode für Ihr Programm haben. – kaylum

+0

es ist schon fertig, immer noch dasselbe. – vesontio

+0

Was ist bereits getan? Was ist das gleiche? Könntest du nicht klarer sein? Wenn du meinst, "Status" wurde überprüft und ist nicht "-1", dann lies bitte den zweiten Teil des Kommentars - der 'WEXITSTATUS' wird von' myprog' zurückgegeben. Es gibt keine Möglichkeit, Ihnen zu sagen, was ein Rückgabewert von 127 bedeutet, da wir den Quellcode zu myprog nicht haben. – kaylum

Antwort

1

dieser Auszug aus der Manpage system()

----------------------------------------------------------------- 
The value returned is -1 on error (e.g., fork(2) failed), and the 
    return status of the command otherwise. 
This latter return status is 
    in the format specified in wait(2). 
Thus, the exit code of the command 
    will be WEXITSTATUS(status). 
In case /bin/sh could not be executed, 
    the exit status will be that of a command that does exit(127)." 
----------------------------------------------------------------- 

zeigt die 127 bedeutet, dass /bin/sh nicht ausgeführt werden konnte.

Verwandte Themen