22
在bash中使命令超时而没有不必要的延迟
命令行命令的此答案可在一定时间后自动杀死命令 提出了一种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技能的极限。