如何在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会去空设备,而不是你的终端。
答
我相信你的错误信息写在stderr上。您需要将其重定向到/ dev/null。
./sim_program 2>的/ dev/null的
谢谢,这工作! :) – 2009-01-06 13:15:34