【问题标题】:How can I suppress the output due to a SIGSEGV or a SIGFPE in a Fortran 90 program?如何抑制 Fortran 90 程序中的 SIGSEGV 或 SIGFPE 输出?
【发布时间】:2009-01-06 12:37:10
【问题描述】:

我有一个 bash 脚本,它运行一个用 Fortran 90 编写的模拟程序,所有输出都被重定向到一个文件。如果程序完成没有问题,我设置一个成功参数。代码如下所示:

#!/bin/bash ... echo -n "正在运行程序..." ./sim_program >& 文件 && 成功="true" 如果 [ $成功 ];然后 回声“确定” 别的 回声“不好” 菲 ...

屏幕的输出应该是“正在运行的程序...OK”或“正在运行的程序...不OK”。在某些情况下,仿真程序会因浮点异常或分段错误而崩溃,并发送相应的信号(SIGSEGV / SIGFPE)。输出可能如下所示:

:~>execute_script 运行程序.../path/to/script: line 232: 15350 Floating Point Exception ./sim_program >& file && success="true" 不好

如何抑制由于 SIGFPE 或 SIGSEGV 导致的错误输出,以便我得到

:~>execute_script 运行程序...不行

即使出现这样的错误?我已经研究过使用陷阱,例如

陷阱 "" SIGSEGV SIGFPE ./sim_program >& 文件 && 成功="true" 陷阱 SIGSEGB SIGFPE

但我仍然得到类似的东西

:~>execute_script 运行程序...浮点异常 不好

感谢任何帮助!

【问题讨论】:

    标签: bash fortran segmentation-fault


    【解决方案1】:

    该错误消息可能会发送到 stderr。

    尝试将其放在脚本的开头:

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

    发送到 stderr 的任何内容都将发送到 null 设备而不是您的终端。

    【讨论】:

      【解决方案2】:

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

      ./sim_program 2>/dev/null

      【讨论】:

        猜你喜欢
        • 2014-09-17
        • 2013-12-16
        • 2017-05-01
        • 2012-01-20
        • 1970-01-01
        • 2011-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多