This question is somewhat related to Capturing stdout and segfault of a program.
In general, I am trying to use a perl script to execute and detect whether a program segfaults or not. The interesting thing is shown in the code snippet below:
#!/usr/bin/perl -w $command = $ARGV[0]; my $execOne = "$command"; my $execTwo = "$command &> log "; # Executing ExecOne eval { system($execOne); }; if ($? & 127) { $segval = $? & 127; print "ExecOne Seg: $segval\n"; } else { print "ExecOne: No fault\n"; } # Executing ExecTwo eval { system($execTwo); }; if ($? & 127) { $segval = $? & 127; print "ExecTwo Seg: $segval\n"; } else { print "ExecTwo: No fault\n"; }
Executing the above script with a known program that segfaults gives the following output
Does anyone else find this strange?ExecOne Seg: 11 ExecTwo: No fault
So my question boils down to why does redirecting the output change the $? value to the extent that the seg fault can no longer be detected?
Is there simply something wrong in my code?
If anyone could shed some light on the matter, it will be greatly appreciated.
Thanks in advance Monks.
In reply to Different values when using $? to detect seg faults by Gmong
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |