提出了一种1行方法来使bash命令行中的长时间运行的命令超时:
( /path/to/slow command with options ) & sleep 5 ; kill $!
但是给定的“长时间运行”命令有可能在超时之前完成。(我们称其为“通常长时间运行,但有时又快”的命令,或以tlrbsf为乐。)
因此,这种漂亮的1线方法存在两个问题。首先,此sleep
条件不是有条件的,因此会为序列完成设置所需的时间下限。当tlrbsf命令在2秒内完成时,请考虑30s或2m甚至5m的睡眠时间,这是非常不希望的。其次,kill
是无条件的,因此此序列将尝试杀死一个未运行的进程并对其进行抱怨。
所以...
有没有办法使通常运行时间长但有时又快的命令(“ tlrbsf”)超时,
- 有一个bash实现(另一个问题已经有Perl和C答案)
- 将在以下两者中的较早者终止:tlrbsf程序终止或超时
- 不会杀死不存在/无法运行的进程(或者(可选):不会抱怨严重的失败)
- 不必是1班轮
- 可以在Cygwin或Linux下运行
...并且为了获得奖励积分,在前台运行tlrbsf命令,在后台运行任何“睡眠”或额外的进程,以便可以重定向tlrbsf命令的stdin / stdout / stderr ,就像之前那样直接运行?
如果是这样,请分享您的代码。如果没有,请解释原因。
我花了一段时间尝试破解前面提到的例子,但是我达到了bash技能的极限。
timeout
实用程序?
timeout
是很棒的!您甚至可以使用多个命令(多行脚本):stackoverflow.com/a/61888916/658497