这个答案 to 命令行命令在一定时间后自动终止命令
提出了一种 1 行方法来使 bash 命令行中长时间运行的命令超时:
( /path/to/slow command with options ) & sleep 5 ; kill $!
但给定的“长时间运行”命令可能会在超时之前完成。
(我们称其为“通常长时间运行但有时很快”的命令,或者tlrbsf为了娱乐。)
所以这个漂亮的单行方法有几个问题。
首先,sleep
不是有条件的,因此这对序列完成所需的时间设置了一个不希望的下限。考虑 30 秒或 2m 甚至 5m 的睡眠时间,当tlrbsf命令在 2 秒内完成——这是非常不受欢迎的。
其次,kill
是无条件的,因此该序列将尝试终止未运行的进程并抱怨它。
So...
有没有办法使通常长时间运行但有时很快的程序超时("tlrbsf")命令
- 有一个 bash 实现(另一个问题已经有 Perl 和 C 答案)
- 将在两者中较早的一个终止:tlrbsf程序终止或超时
- 不会杀死不存在/未运行的进程(或者,可选:不会complain关于一次糟糕的杀戮)
- 不一定是 1-liner
- 可以在Cygwin或Linux下运行
...并且,为了奖励积分
- 运行tlrbsf前台命令
- 后台任何“睡眠”或额外进程
这样的 stdin/stdout/stderrtlrbsf命令可以重定向,就像直接运行一样吗?
如果是这样,请分享您的代码。如果不是,请解释原因。
我花了一段时间尝试破解上述示例,但我已经达到了 bash 技能的极限。
您可能正在寻找timeout
coreutils 中的命令。由于它是 coreutils 的一部分,因此从技术上来说它是一个 C 解决方案,但它仍然是 coreutils。info timeout
更多细节。
这是一个例子:
timeout 5 /path/to/slow/command with options
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)