我正在开发一个共享库L
,供其他系统服务S
使用。在我的程序中,我需要调用一个小程序P
,它使用Oracle共享库。
小程序P
打包安装正确,PATH
、LD_LIBRARY_PATH
、ORACLE_HOME
等环境变量设置正确。我可以在命令行上运行P
没有任何问题。
但是当服务S
调用我的库L
时,它通过system()
P
运行小程序,它给了我一个返回代码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
是否消除了我的环境变量。
本文摘自手册页
,供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
。
好了,我找到了答案:如何让unix服务看到环境变量?,环境变量在init.d脚本中被删除了。