我正在写一个大学作业,需要用多个不同的参数多次运行来检查运行时间。目前我有一个简单的 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。