这个对命令行命令的回答在一定时间后自动终止命令
提出了一种 1 行方法来使 bash 命令行中的长时间运行的命令超时:
( /path/to/slow command with options ) & sleep 5 ; kill $!
但是给定的“长时间运行”命令可能会在超时之前完成。
(让我们称其为“通常长时间运行但有时很快”的命令,或tlrbsf来表示乐趣。)
所以这个漂亮的 1-liner 方法有几个问题。
首先,sleep
不是有条件的,因此对序列完成所需的时间设置了一个不希望的下限。当tlrbsf命令在 2 秒内完成时,考虑 30s 或 2m 甚至 5m 的睡眠时间——非常不受欢迎。
其次,它kill
是无条件的,所以这个序列将试图杀死一个非运行的进程并抱怨它。
所以...
有没有办法让一个通常长时间运行但有时快速(“tlrbsf”)命令超时
- 有一个 bash 实现(另一个问题已经有 Perl 和 C 的答案)
- 将在两者中的较早者终止:tlrbsf程序终止,或超时已过
- 不会杀死不存在/未运行的进程(或者,可选:不会抱怨错误的杀死)
- 不必是 1-liner
- 可以在 Cygwin 或 Linux 下运行
...并且,对于奖励积分
- 在前台运行tlrbsf命令
- 后台的任何“睡眠”或额外进程
这样tlrbsf命令的 stdin/stdout/stderr 可以被重定向,就像它直接运行一样?
如果是这样,请分享您的代码。如果不是,请解释原因。
我花了一段时间试图破解上述示例,但我的 bash 技能已达到极限。