如何在Fortran 90程序中抑制由于SIGSEGV或SIGFPE导致的输出?

问题描述:

我有一个bash脚本,运行用Fortran 90编写的模拟程序,所有输出都被重定向到一个文件。如果程序没有问题,我设置一个成功参数。代码如下所示:如何在Fortran 90程序中抑制由于SIGSEGV或SIGFPE导致的输出?

 
#!/bin/bash 
... 
echo -n "Running program..." 
./sim_program >& file && success="true" 
if [ $success ]; then 
    echo "OK" 
else 
    echo "NOT OK" 
fi 
... 

输出到屏幕应该是“Running program ... OK”或“Running program ... NOT OK”。在某些情况下,仿真程序会因浮点异常或分段故障而崩溃,并发送相应的信号(SIGSEGV/SIGFPE)。然后,输出可能是这个样子:

 
:~>execute_script 
Running program.../path/to/script: line 232: 15350 Floating Point Exception ./sim_program >& file && success="true" 
NOT OK 

我怎样才能取消错误输出由于SIGFPE或SIGSEGV这样,我得到

 
:~>execute_script 
Running program... NOT OK 

即使有这样的错误?我研究过使用陷阱,例如

 
trap "" SIGSEGV SIGFPE 
./sim_program >& file && success="true" 
trap SIGSEGB SIGFPE 

但后来我还是得到类似

 
:~>execute_script 
Running program... Floating Point Exception 
NOT OK 

任何帮助表示赞赏!

即错误消息可能会到stderr。

尝试把这个在你的脚本开始:

#!/bin/bash 
exec 2> /dev/null 

和任何发送到stderr会去空设备,而不是你的终端。

+0

谢谢,这工作! :) – 2009-01-06 13:15:34

我相信你的错误信息写在stderr上。您需要将其重定向到/ dev/null。

./sim_program 2>的/ dev/null的