【问题标题】:exec Exit Code Meaning for 11exec 退出代码 11 的含义
【发布时间】:2013-04-17 22:35:30
【问题描述】:

我在 linux web 服务器上使用以下代码

$error = exec('phantomjs table1.js', $op, $code);
echo $code; // prints 11 on screen

table1.js

var page = require('webpage').create();
var url = 'table1.php';
page.open(url, function (status) {
    page.render('ss/table1.png');
    phantom.exit();
});

table1.php

echo '<h1>This should be converted to an image</h1>';

我浏览了this 链接,但那里没有列出该代码。知道这个退出代码代表什么吗?

【问题讨论】:

  • 这是你完整的table1.js吗?
  • 是的,这就是完整的 javascript 代码。没有任何东西高于或低于它。

标签: php linux exec exit-code


【解决方案1】:

代码 11 是“segmentation fault”:当程序尝试在一块未分配给程序的内存中分配数据时,会导致程序段错误(也称为 segfault)。它表示程序错误并且通常(如果不总是)使程序崩溃。在您的情况下,段错误可能是由 phantomjs 引起的,这表明可能是旧版本或 beta 版本。

【讨论】:

  • 嗯..这很奇怪。 table1.js 中没有任何输出11 的代码。
  • 文件中只有上面列出的这两行(我们称之为abc.php)当我运行abc.php 时,屏幕上会显示11。你指的是table1.js里面的东西吗?
  • 这是一个二进制文件,有助于创建正在呈现的页面的屏幕截图(在我的例子中,table1.php 的输出)。更多信息here
  • 我将您的 table1.js 复制到我的中,它运行良好(即使没有渲染任何内容)。
  • 这个完全相同的代码也适用于我的本地主机......问题出在生产服务器上
【解决方案2】:

这是我发现的。

  • 您的 phantomjs 正在调用某个子进程。 (我的假设是您在节点上执行此操作)。
  • 现在,如果 table1.js 突然退出,则返回代码将是二进制 00001000 并且主进程(根据假设的节点)也将以相同的二进制错误代码退出。
  • 现在根据退出状态相关性,两个二进制文件都将转换为正常的符号信号,这使得两者都是 11

因此您的错误代码为 11。

来源: Are there any standard exit status codes in Linux?

【讨论】:

  • 根据该线程,分段错误导致代码11。我的服务器错误日志中列出了这个分段错误。知道分段错误的原因或原因吗?
  • 它是resource not found。查看分段错误描述here
  • @asprin 如果您尝试保存 PHP 文件的输出,请将其托管在服务器上并提供完整的 URL。我尝试了谷歌图像捕获脚本,它工作。所以我可以说这件事会奏效。我的建议是在您的本地主机上并提供完整的路径,如http://localhost/table1.php,然后修改您的 js 以从该路径获取。
猜你喜欢
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
相关资源
最近更新 更多