From: Robert Klemme Date: 2011-02-03T21:01:35+09:00 Subject: Re: Bug in system()? On Wed, Feb 2, 2011 at 5:49 PM, Anthony Wright wrote: > 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 '$?' ? You can use system's return value irb(main):006:0> system '/bin/sh -c "exit 1"' => false irb(main):007:0> system '/bin/sh -c "exit 0"' => true system("/bin/tar --extract --directory=#{dir} --file=#{file}") or raise "tar unpack failed" Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/