我正在开发一个共享库L,它被其他系统服务S使用。在我的程序中,我需要调用一个小程序P,它使用Oracle共享库。
小程序P已正确打包和安装,环境变量(如PATHLD_LIBRARY_PATHORACLE_HOME已正确设置。我可以在命令行上运行P,没有任何问题。
但是当service通过S调用运行小程序L的库时,它会给我一个返回代码P。我在谷歌上搜索过,人们说这是一个system()错误,可能是一个127问题,所以我尝试了如下绝对路径

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

command not found仍然等于PATH
你知道吗?谢谢您。
更新
原来,服务ret是通过命令127启动的,在它的S脚本中,我找到了以下行:
daemon /usr/bin/myserv

如果我显式地将我的所有环境变量(daemoninit.dexport)都设置为PATH,它就会工作。我不知道ORACLE_HOME是否消除了我的环境变量。

最佳答案

这段摘自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)."
-----------------------------------------------------------------

表示127表示无法执行/bin/sh

关于c - system()不断返回127,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37426384/

10-17 02:31