![强制运行 bash 脚本直至完成,但某些项目可能会卡住](https://linux22.com/image/1256366/%E5%BC%BA%E5%88%B6%E8%BF%90%E8%A1%8C%20bash%20%E8%84%9A%E6%9C%AC%E7%9B%B4%E8%87%B3%E5%AE%8C%E6%88%90%EF%BC%8C%E4%BD%86%E6%9F%90%E4%BA%9B%E9%A1%B9%E7%9B%AE%E5%8F%AF%E8%83%BD%E4%BC%9A%E5%8D%A1%E4%BD%8F.png)
我正在写一个大学作业,需要用多个不同的参数多次运行来检查运行时间。目前我有一个简单的 bash 脚本,看起来有点像下面这样 - 它记录了它正在做的事情和time
每个测试的结果,所有正常输出都被丢弃(我正在其他地方检查正确性,不用担心)。
问题是,有时候(而且是相当罕见)master
的过程得到卡住并且永远不会终止,这显然妨碍了完成测试运行。显然,我正在努力解决这个问题,但算法没有问题,所以我仍然想继续测试,因为交稿日期即将到来。
因此,我希望以某种方式指定进程的最大运行时间,如果它们超过该时间,我希望它们自动终止(最好通过SIGINT
或其他一些已识别的信号),然后脚本继续下一个条目。或者任何具有相同结果的合适替代方案。
有什么建议吗?
我目前所拥有的片段:
#!/bin/bash
echo "starting tests: clearing output file" > log
echo "running single tests" >> log
echo " starting 16" >> log
time (./single 16) 1> /dev/null 2>> log
time (./single 16) 1> /dev/null 2>> log
time (./single 16) 1> /dev/null 2>> log
#etc
echo "running multi tests" >> log
echo " starting 16 1 1 1" >> log
time (./master 16 4 7 100) 1> /dev/null 2>> log
time (./master 16 4 7 100) 1> /dev/null 2>> log
time (./master 16 4 7 100) 1> /dev/null 2>> log
#etc
答案1
“如何运行命令,并让其在 N 秒后中止(超时)?”,BASH 常见问题解答条目 #68。