system()一直返回127

时间:2016-05-25 01:23:47

标签: c linux bash

我正在开发一个共享库L,供其他系统服务S使用。在我的程序中,我需要调用一个使用Oracle共享库的小程序P

正确打包并安装了小程序P,并正确设置了PATHLD_LIBRARY_PATHORACLE_HOME等环境变量。我可以在命令行上运行P而没有任何问题。

但是当服务S调用我的库L并通过P运行小程序system()时,它会返回代码127。我用谷歌搜索,人们说这是command not found错误,可能是PATH问题,所以我尝试使用绝对路径,如下所示

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

ret仍然等于127

请问好吗?谢谢。

更新 事实证明服务S是通过命令daemon启动的,在init.d脚本中,我找到了以下行:

daemon /usr/bin/myserv

如果我export明确表示我的所有环境变量(PATHORACLE_HOMELD_LIBRARY_PATH),那么它就可以了。我不知道daemon是否会消除我的环境变量。

2 个答案:

答案 0 :(得分:1)

摘自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

答案 1 :(得分:0)

好吧,我找到了答案:How to make unix service see environment variables?,在init.d脚本中删除了环境变量。