6

考虑这个fork()的简单示例,然后在 Perl 中等待孩子死去:

#!/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中找不到这个记录。这是我系统上的错误还是我做错了什么?

4

2 回答 2

24

它记录在perlvar手册页的$?部分。

即真正的退出代码是$? >> 8

于 2010-05-25T22:36:57.450 回答
2

孩子可能连电话都没有exit。因此,$?包含更多信息而不仅仅是exit参数。

if    ( $? == -1  ) { die "Can't launch child: $!\n"; }
elsif ( $? & 0x7F ) { die "Child killed by signal ".( $? & 0x7F )."\n"; }
elsif ( $? >> 8   ) { die "Child exited with error ".( $? >> 8 )."\n"; }
else                { print "Child executed successfully\n"; }

这在 的文档中有更清楚system的记录。

于 2016-08-19T16:15:48.940 回答