当进程卡住时跳出

当进程卡住时跳出

我编写了一个循环来迭代所有.outc 二进制文件并将其输出复制到一个文本文件中(每个二进制文件的输出只是一行哈希值,一个程序的一行输出)。到目前为止,这是我的代码:

for j in {1..10}
do
    ./gcc-$j.out >> gcc-result.txt
done

不幸的是,某些二进制文件存在一些未知问题,无法正确执行(它们被卡住并且无法继续执行下一个程序)。

我不打算修复这些 C 代码,但我希望我的 bash 在给定的超时(例如 10 秒)内自动跳转到执行下一个程序,并将“0”写入gcc-result.txt.

如果您有解决此问题的想法,请先致谢。

答案1

您可以使用超时命令:

if timeout 10 ping google.fr > /dev/null
then
    echo "process successful"
else
    echo "process killed"
fi

显示process killed, 和

if timeout 10 ls /usr/bin | wc -l > /dev/null
then
    echo "process successful"
else
    echo "process killed"
fi

显示process successful.基于此,您可以使用这样的 运行每个命令if; then; else; fi,将标准输出重定向到临时文件,并在成功情况下将该临时文件复制到目标文件,而在失败情况下生成目标文件。

如何终止进程并确保 PID 未被重用如果您没有超时,可能会有帮助。

答案2

您当然可以在执行一段时间后终止子进程,并在 bash 脚本中附加所需的文本文件“0”。
你可能会发现Bash 脚本在给定的超时后杀死子进程有用。

相关内容