2010-05-25 18 views
6

considerare questo esempio banale di fork() ing quindi in attesa di un bambino a morire in Perl:

#!/usr/bin/perl 

use strict; 
use warnings; 

if (fork() == 0) { 
     exit(1); 
} 

waitpid(-1,0); 

print $?; 

Esecuzione dello script su Solaris 10 ottengo questo risultato:

$ perl test.pl 
256 

Ho il sospetto che i valori di sono essendo spostato verso l'alto perché quando faccio il exit(2) nel bambino, l'output diventa 512.

Non riesco a trovare questo documento in Perl waitpid. Si tratta di un bug sul mio sistema o sto facendo qualcosa di sbagliato?

risposta

23

È documentato nella sezione $? della pagina man perlvar.

, ad esempio il codice di uscita reale è $? >> 8.

+9

È anche descritto in [perldoc -f system] (http://perldoc.perl.org/functions/system.html). – Ether

1

Il bambino potrebbe non aver nemmeno potuto chiamare exit. Pertanto, $? contiene più informazioni rispetto al solo parametro 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"; } 

Questo è documentato in modo più chiaro nella documentazione system s'.

Problemi correlati