为什么 Perl 是 $?返回分叉进程的退出代码的错误值?
考虑这个在 Perl 中 fork() 然后等待子进程死亡的简单示例:
#!/usr/bin/perl
use strict;
use warnings;
if (fork() == 0) {
exit(1);
}
waitpid(-1,0);
print $?;
在 Solaris 10 上运行脚本,得到以下结果:
$ perl test.pl
256
我怀疑 的值正在向上移动,因为当我在子进程中执行 exit(2)
时,输出变为 512
。
我似乎找不到 Perl 的 waitpid 中的记录。这是我的系统上的错误还是我做错了什么?
Consider this trivial example of fork()ing then waiting for a child to die in Perl:
#!/usr/bin/perl
use strict;
use warnings;
if (fork() == 0) {
exit(1);
}
waitpid(-1,0);
print $?;
Running the script on Solaris 10 I get this result:
$ perl test.pl
256
I suspect the values of are being shifted upwards because when I do exit(2)
in the child, the output becomes 512
.
I can't seem to find this documented in perl's waitpid. Is this a bug on my system or am I doing something wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它记录在 perlvar 手册页的
$?
部分中。即真正的退出代码是
$? >>> 8.
.It's documented in the
$?
section of the perlvar man page.i.e. the real exit code is
$? >> 8
.孩子可能甚至没有机会调用
exit
。因此,$?
包含的信息不仅仅是exit
参数。system
的文档对此进行了更清晰的记录。The child might not even have gotten to call
exit
. As such,$?
packs more information than just theexit
parameter.This is documented more clearly in
system
's documentation.