我正在开发一个共享库L
,它被其他系统服务S
使用。在我的程序中,我需要调用一个小程序P
,它使用Oracle共享库。
小程序P
已正确打包和安装,环境变量(如PATH
、LD_LIBRARY_PATH
和ORACLE_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
如果我显式地将我的所有环境变量(
daemon
、init.d
和export
)都设置为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/