gpt4 book ai didi

perl - 为什么在Perl中使用退出代码255而不是-1?

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

为什么当我在Perl中将退出代码$?移8时,如果我期望它是-1,我得到255?

最佳答案

“wait()”返回的退出状态是一个16位值。在这16位中,高8位来自'exit()'返回的值的低8位或main()返回的值。如果程序自然死机,则16位的低8位全为零。如果程序因信号而死,则低8位编码信号号,而1位指示是否发生内核转储。对于信号,退出状态被视为零-像Shell这样的程序倾向于将非零的低阶位解释为失败。

15      8 7      0   Bit Position
+-----------------+
| exit | signal |
+-----------------+

实际上,大多数计算机将16位值存储在32位整数中,并且使用无符号算术来处理。如果进程以“exit(-1)”退出,则16位中的高8位可能全为1,但是当右移8位时将显示为255。

如果您确实要将值转换为带符号的数量,则必须基于第16位进行一些位纠错。
$status >>= 8;
($status & 0x80) ? -(0x100 - ($status & 0xFF)) : $status;

另请参见 SO 774048SO 179565

关于perl - 为什么在Perl中使用退出代码255而不是-1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2726447/

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