我正在尝试使用system
Ruby 中的函数执行程序。我需要捕获程序的标准输出和标准错误,所以我使用一个将标准输出和标准错误重定向到文件的 shell 命令。一个重要的要求是我需要确定程序是正常退出还是被信号杀死。
我看到的奇怪行为是,当我将 stdout 和 stderr 重定向到文件时,$?.exited?
即使程序被信号杀死也是如此!这是一个演示该问题的程序:
#! /usr/bin/ruby
File.open("bad.c", "w") do |out|
out.print <<'EOF'
#include <stdio.h>
int main(void) {
int *p = 0;
*p = 42;
printf("%d\n", *p);
return 0;
}
EOF
end
raise "Couldn't compile bad.c" unless system("gcc -o bad bad.c")
system("./bad");
puts $?.exited?
system("./bad > out 2> err");
puts $?.exited?
这个程序的输出是
false
true
但是,我希望
false
false
因为程序在这两种情况下都被段错误杀死。
该命令ruby -v
产生输出
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
任何解释和/或解决方法将不胜感激!