代码之家  ›  专栏  ›  技术社区  ›  Mike

为什么Perl的$?为分叉进程的退出代码返回错误的值?

  •  6
  • Mike  · 技术社区  · 15 年前

    fork() 然后在Perl中等待一个孩子死去:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    if (fork() == 0) {
            exit(1);
    }
    
    waitpid(-1,0);
    
    print $?;
    

    $ perl test.pl
    256
    

    我怀疑的价值观正在向上转移,因为当我这样做 exit(2) 在子对象中,输出变为 512 .

    我似乎找不到在perl的 waitpid . 这是我系统上的错误还是我做错了什么?

    2 回复  |  直到 15 年前
        1
  •  24
  •   rjh    15 年前

    文件上有记载 $? 剖面图 perlvar 手册页。

    i、 e.真正的退出代码是 $? >> 8

        2
  •  2
  •   ikegami Gilles Quénot    9 年前

    孩子可能连打电话都没有 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

    推荐文章