我正在开发一个共享库L
,供其他系统服务S
使用。在我的程序中,我需要调用一个使用Oracle共享库的小程序P
。
正确打包并安装了小程序P
,并正确设置了PATH
,LD_LIBRARY_PATH
和ORACLE_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
明确表示我的所有环境变量(PATH
,ORACLE_HOME
和LD_LIBRARY_PATH
),那么它就可以了。我不知道daemon
是否会消除我的环境变量。
答案 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脚本中删除了环境变量。