I’ve just hit a problem where the system() method to call an external
program failed in a fairly unpredictable way, and I couldn’t get any
clues from within ruby to diagnose the problem, so I ended up debugging
process.c to work out what the problem was.
My code looks something like:
system("/bin/tar --extract --directory=#{dir} --file=#{file}")
if $?.exitstatus !=0
raise “tar unpack failed with exitstatus: #{$?.exitstatus}”
end
But it fails on the if because ‘$?’ isn’t being set by the failing
system() method and so ‘$?’ is nil.
The problem ultimately boiled down to the fork() system call failing
with ENOMEM (badly configured system, but that’s another matter).
Am I missing something here? Should there be a way to get errno from
ruby, or am I missing other diagnostic information I could have used?
Is there a bug in system()? Shouldn’t it always set ‘$?’ ?
thanks,
Anthony W.