作者:mobiledu2502877091 | 来源:互联网 | 2022-12-10 13:54
我有一个简单的c ++程序,它引发了SIGSEGV:
#include
#include
int main() {
std::cout <<"Raising seg fault..." <
运行此程序时,我得到以下输出
Raising seg fault...
Segmentation fault
但是当我使用管道在perl脚本中运行我的程序时,分段错误消失了.这是我的Perl脚本:
use strict;
use warnings;
my $cmd ="./test";
open (OUTPUT, "$cmd 2>&1 |") || die();
while (
运行脚本时,我得到以下输出:
Raising seg fault...
exit status: 0
怎么可能这样呢?分段错误在哪里?为什么退出状态为0?
1> ikegami..:
您特别忽略了部分$?
,表明该过程是否被信号杀死.
更换
my $exit_status = $?>>8;
print "exit status: $exit_status\n";
同
die("Killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
die("Exited with error ".( $? >> 8 )."\n") if $? >> 8;
print("Completed successfully\n");
因为该消息是由shell生成的