强制 bash 脚本运行完成,某些项目可能会粘住

DMA*_*361 3 script bash

我有一个正在构建的 Uni 作业,我需要使用多个不同的参数多次运行以检查运行时间。目前我有一个简单的 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
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 5

“如何运行命令,并让它在 N 秒后中止(超时)?”,BASH 常见问题条目 #68