【问题标题】:Shell Script Segmentation FaultShell 脚本分段错误
【发布时间】:2009-07-24 11:05:00
【问题描述】:

您好,我有一个 shell 脚本,它应该根据 php 代码的返回运行:

x=1
while [[ "$x" != 5 ]] 
do
  echo "Welcome $x"
  php test.php
  x=$?
done

还有php代码

echo "Testdfdf test".PHP_EOL;
exit(4);

所以我希望每当我从 php 获得 5 时退出循环。

但我有时会:

./myshell: line 7: 20529 Segmentation fault      php test.php

它应该循环没有问题吗?

【问题讨论】:

  • 使用 ulimit 启用核心转储;运行脚本;当你查看核心文件时,它会告诉你是哪个进程导致了它的创建——很可能是 PHP 解释器,这不是 bash 问题;然后,您可以从核心转储生成堆栈跟踪以报告给相关方。

标签: php shell


【解决方案1】:

可能是因为这个错误影响了 Ubuntu 和 Debian...https://bugs.launchpad.net/ubuntu/+source/php5/+bug/343870

【讨论】:

  • 我在 Debian 上遇到了同样的问题,但在 CentOS 中没有
【解决方案2】:

应该而且确实如此,但不知道为什么 php 会以段错误结束。

【讨论】:

    【解决方案3】:

    您的 shell while 循环将永远循环,因为您的 php 脚本将 4 返回到 shell,并且您的 while 循环会检查 !=5。这意味着条件不会被满足。你到底想要做什么?除非必要,我会建议用 php(或 shell)做所有事情,但尽量不要将两者混合在一起。

    【讨论】:

    • 两者混用完全符合UNIX“多小工具”的思想;毕竟,调用其他程序并检查它们的退出代码是 shell 最擅长的。 :) 将所有内容都推入 PHP 的好处是不需要在循环的每个周期都启动一个新的解释器——当然是性能增强,尽管可能会影响正确性(如果 PHP [ab ]使用全局变量)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2014-11-05
    • 2014-06-06
    相关资源
    最近更新 更多