【发布时间】:2018-07-17 12:10:09
【问题描述】:
我有一个引发 SIGSEGV 的简单 c++ 程序:
#include <iostream>
#include <signal.h>
int main() {
std::cout << "Raising seg fault..." << std::endl;
raise(SIGSEGV);
return 0;
}
运行此程序时,我得到以下输出
Raising seg fault...
Segmentation fault
但是当我使用管道在 perl 脚本中运行我的程序时,分段错误消失了。 这是我的 Perl 脚本:
use strict;
use warnings;
my $cmd ="./test";
open (OUTPUT, "$cmd 2>&1 |") || die();
while (<OUTPUT>) {
print;
}
close (OUTPUT);
my $exit_status = $?>>8;
print "exit status: $exit_status\n";
我在运行脚本时得到以下输出:
Raising seg fault...
exit status: 0
这怎么可能?分段错误在哪里,为什么退出状态为0?
【问题讨论】:
-
$?的低字节是什么 -
@Håkon Hægland,嗯,不。命令有效。您引用的段落意味着执行命令的问题可能只有
close才能揭示。 -
@ikegami 谢谢,我完全错过了!你当然是对的。
标签: perl segmentation-fault child-process exit-code