【问题标题】:What does it mean when I get a huge exit status when closing a pipe in perl在 perl 中关闭管道时出现巨大的退出状态是什么意思
【发布时间】:2015-04-29 16:04:24
【问题描述】:

我使用管道运行脚本

my $pid = open (OUTPUT, "$my_script") || "";
if (! $pid) {
  die("error");
}
while (<OUTPUT>) {
  print;
}
close (OUTPUT);
my $exit_status = $?>>8;
print "$exit_status";

有时我的退出状态很长:72057594037927935

这是什么意思?是什么原因造成的?

【问题讨论】:

  • 我猜你使用的是 64 位版本的 Perl。您发布的数字与移动了 8 位的 -1 (0xFFFFFFFFFFFFFFFF) 相同。我认为“真正的”退出状态是-1。
  • @HermannSchachner 谢谢你是对的
  • 这里出了点问题,因为退出代码必须在0..255 范围内,-1 不是有效的退出代码。可能,一些错误检查会有所帮助(在openclose 之后)。
  • @salva 你是对的,我无法经常重现这个。我尝试了一个总是以退出状态 -1 退出的脚本,但我得到的是 255 而不是这个长数字......我不知道如何不断重现这个问题
  • @Morad,即使您调用 exit(-1),该值也会被截断为 1 个字节。见exit(3)

标签: perl pipe


【解决方案1】:

你得到一个长数字,因为$? 的值是-1。将其右移 8 位会产生很大的数字。试试这个:

print -1>>8;

$?-1,因为 close() 函数由于某种原因失败,而不是因为脚本以退出状态 -1 退出。

close() 成功并且脚本以-1 退出时,$? 的值将不是-1,但$?&gt;&gt;8 的值将是255,如下所述:Why is the exit code 255 instead of -1 in Perl?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2015-02-01
    相关资源
    最近更新 更多