【问题标题】:perl system() exit code 36096perl system() 退出代码 36096
【发布时间】:2015-06-20 13:36:46
【问题描述】:

我试图从以下对 ksh 脚本的 system() 调用中查找退出代码 36096 的含义。

$proc_ret = system("/path/to/shellscript.sh"); 

$proc_ret 返回“36096”

我检查了 shellscript.sh 的输出,它运行良好,直到调用了 shellscript.sh 中的另一个 shell 脚本(status.sh)。 只有该脚本的第一行被调用,脚本的其余部分没有被调用。

这里是status.sh的内容

echo "a" > /tmp/a
echo "complete."
echo "b" >> /tmp/a
cat /path/to/mail.txt | mail -s "subject" email@domain
echo "mail complete."
echo "c" >> /tmp/a

我不知道为什么脚本在第一行之后没有继续。对 shellscript.sh 进行的系统调用的退出代码对我来说看起来很奇怪。 如果有人知道 36096 的含义,请告诉我。

【问题讨论】:

    标签: perl ksh


    【解决方案1】:

    请注意,36096 是 141 * 256。正如 system 文档告诉您的那样,141 是程序的退出状态。再次注意,shell 的退出状态 >128 通常意味着子进程因信号而被终止。该信号是通过从退出状态中减去 128 获得的(即查看低 7 位)。

    所以脚本得到信号 13,即SIGPIPE - 在没有阅读器的管道上写入。

    看起来好像无法启动 mail 程序(得到了 PATH 对吗?通常 cron 作业的 PATH 非常小,您需要在脚本中使用 PATH=$(getconf PATH) 之类的东西来设置它。 )

    然后cat 管道进入一个不存在的阅读器,瞧,你的信号。

    顺便说一句,cat 没用,因为mail -s subj recipient < /path/to/mail.txt 可以避免昂贵的叉子和管道。

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多