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.
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
es ist schon fertig, immer noch dasselbe. – vesontio
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