当system()成功执行相同命令时,为什么pclose()返回32512(退出代码127?)>

问题描述 投票:2回答:2

我在打电话:

FILE *fp = popen(cmd,"r");
...
fprintf(stderr,"%d\n",pclose(fp));

我正在从CGI脚本中调用它。

这曾经起作用,但是最近正在运行的命令开始神秘地失败,因此我添加了fprintf来查看返回的状态代码pclose(),我很惊讶地看到它是32512,它对应于退出代码os127。我已验证该命令实际上并未在运行,并且返回值对应于退出状态127。

我尝试在正在运行的二进制文件上运行otool -L,一切看起来都很好。我正在使用命令的完整路径来调用命令,因此没有任何变化,即找不到可执行文件。我已经打印了当前目录,以确保我在我想的位置,并已验证该二进制文件是可见的。

如果我以与CGI运行相同的用户身份登录,则运行完全相同的命令,因为它运行正常。如果我通过将其传递给system()来运行完全相同的命令,那么它也可以在这里运行!仅当我尝试通过popen()运行它时,它才会失败。

命令是什至没有关系!我用其他命令替换了它,例如ls,但仍然得到这个奇怪的退出代码。

我没办法尝试了。还有什么呢?

我正在打电话:FILE * fp = popen(cmd,“ r”); ... fprintf(stderr,“%d \ n”,pclose(fp));我是从CGI脚本调用的。这曾经可以工作,但是最近正在运行的命令已经开始神秘地...

macos cgi popen
2个回答
0
投票

以防将来有人遇到此问题,这是我解决的方法。该代码中先前有一个对popen()的调用,对代码的检查表明它被fclose()而不是pclose()错误地关闭了。因为先前的popen调用未正确关闭,所以它阻止了以后的调用正常工作。


0
投票

就我而言,我正在终端(zsh)和C命令执行外壳(bash)上运行不同的外壳。

© www.soinside.com 2019 - 2024. All rights reserved.