如何抑制 Fortran 90 程序中 SIGSEGV 或 SIGFPE 的输出?

发布于 2024-07-10 12:25:45 字数 933 浏览 3 评论 0原文

我有一个 bash 脚本,它运行一个用 Fortran 90 编写的模拟程序,所有输出都重定向到一个文件。 如果程序顺利完成,我将设置一个成功参数。 代码看起来像这样:

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

屏幕的输出应该是“正在运行程序...正常”或“正在运行程序...不正常”。 在某些情况下,仿真程序会因浮点异常或分段错误而崩溃,并发送相应的信号(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

感谢任何帮助!

I have a bash script that runs a simulation program written in Fortran 90, and all output is redirected to a file. If the program finishes without problems, I set a success parameter. The code looks something like this:

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

The output to screen should be either "Running program... OK" or "Running program... NOT OK". In some cases, the simulation program will crash with a floating point exception or a segmentation fault, and the corresponding signals are sent (SIGSEGV / SIGFPE). The output may then look something like this:

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

How can I suppress the error output due to the SIGFPE or SIGSEGV such that I get

:~>execute_script
Running program... NOT OK

even when there is such an error? I have looked into using trap, e.g.

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

but then I still get something like

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

Any help is appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

醉生梦死 2024-07-17 12:25:45

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

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

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

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

That error message is probably going to stderr.

Try putting this at the start of your script:

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

and anything send to stderr will go to the null device rather than your terminal.

还如梦归 2024-07-17 12:25:45

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

./sim_program 2>/dev/null

I believe your error message is written on stderr. You need to redirect it to /dev/null.

./sim_program 2>/dev/null

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文