来自php执行c脚本的错误消息

时间:2012-08-12 04:10:28

标签: php error-handling segmentation-fault exec

我花了好几个小时试图调试一个使用exec()运行c模拟的php脚本。在各处抛出stderr打印消息之后,我终于发现底层问题是使用sprintf()将目录路径打印到一个太小的char数组。

我猜这是一个分段错误,但我从未真正看到过shell错误消息,说'分段错误'。当我更改分配大小时,一切正常。

我一直在将stderr输出重定向到日志文件,该日志文件从fprintf(stderr,“...”)获取所有消息;但它没有收到任何shell错误消息。

命令就是这个

exec("$cmd 2>> $logFile & $PROCFILE 1 $ipaddr $! 2>> $logFile", $output, $rv);

$ cmd运行c模拟,$ PROCFILE运行第二个c程序,它接受三个参数(1,$ ipaddr和$!)。在我修复分配大小问题之前,php脚本将停止执行$ cmd模拟并继续下一行(即在exec()语句之后)。 php文件中的下一行是

if(rv!=0){handle error}

但这也没有解决问题。

我一直在想我遇到了权限错误。如何让exec()显示shell错误?或者这是与“&”同时运行两个程序的结果?

1 个答案:

答案 0 :(得分:0)

程序死亡时,“分段错误”消息来自shell,而不是来自程序。重定向仅适用于程序的输出,而不适用于shell的输出。该消息应该放入$ output变量中。如果$ rv为0并且$ output中没有任何内容,我怀疑你发生的事情是错的。我建议您通过编写一个简单的测试程序来验证这一点:

kill(0, SIGSEGV);

BTW,你为什么不使用snprintf(),所以你不能在第一时间获得缓冲区溢出?