gpt4 book ai didi

perl - 在 perl 中,我们如何检测外部命令中的段错误

转载 作者:行者123 更新时间:2023-12-04 10:04:26 25 4
gpt4 key购买 nike

以下是注定会崩溃的 C 代码:

#include<stdio.h>
#include<stdlib.h>

int main() {
char *p = NULL;
printf("Value at P: %c\n", *p);
return 0;
}

当我编译并运行它(带有 gcc 4.5.2 的 RH4 机器)时,它可以预见地给出一个段错误:
%  ./a.out
Segmentation fault

% echo $status
139

如果我用 Perl v5.8.5 运行它,会发生这种情况:
%  perl -e 'system("./a.out") and die "Status: $?"'
Status: 11 at -e line 1.

perlvar $? 的文档说

Thus, the exit value of the subprocess is really ($?>> 8 ), and $? &
127
gives which signal, if any, the process died from, and $? & 128 reports whether there was a core dump.


11 >> 80 , 和 11 & 12711 .

为什么退出状态不同?如果我们不能依赖退出状态,那么在外部命令中检测段错误的方法应该是什么?

最佳答案

阅读 system 的文档可能会回答你的问题:

system('a.out');

if ($? == -1) {
print "failed to execute: $!\n";
}
elsif ($? & 127) {
printf "child died with signal %d, %s coredump\n",
($? & 127), ($? & 128) ? 'with' : 'without';
}
else {
printf "child exited with value %d\n", $? >> 8;
}

输出:
child died with signal 11, without coredump

shell 只是以不同的方式对状态中的信号进行编码:139 - 128 = 11。例如, man bash说:

The return value of a simple command is its exit status, or 128+n if the command is terminated by signal n.

关于perl - 在 perl 中,我们如何检测外部命令中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18332846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com